code-coordinator 0.5.147__tar.gz → 0.5.148__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.147 → code_coordinator-0.5.148}/PKG-INFO +3 -1
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/README.md +2 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/code_coordinator.egg-info/PKG-INFO +3 -1
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/lifecycle.py +21 -2
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/server.py +17 -1
- code_coordinator-0.5.148/docs/ADR_COORD_WEB_DIST.md +158 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/PHONE_WEBAPP.md +6 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_dashboard.py +212 -1
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.github/workflows/acceptance-web.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/.gitignore +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/CLAUDE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/GOAL.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/LICENSE +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/MANIFEST.in +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/agent.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/audit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/block_log.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/board_service.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/brain.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/claim.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/cli.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/client.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/comments.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/config.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dao.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/db.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/deps.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/drive.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/events.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/filelock.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/freshness.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/gates.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/goal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/context.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/models.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/render.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/health/units.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/hooks.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/interactive.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/models.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/network.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/notify.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/openapi.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/parentage.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/plans.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/progress.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/release_window.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/reports.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/review.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/smoke.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/split_work.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/test_author.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/test_report.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/usage.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/install-agent.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/pyproject.toml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/setup.cfg +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/conftest.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_config.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_db.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_events.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_init.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_models.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_network.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_review.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_session.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_split.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.148}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-coordinator
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.148
|
|
4
4
|
Summary: Coordinate Claude Code workers across multiple machines and repos.
|
|
5
5
|
Author-email: John Donaghy <johnfdonaghy@gmail.com>
|
|
6
6
|
License-Expression: LicenseRef-FSL-1.1-MIT
|
|
@@ -506,6 +506,8 @@ after publication.
|
|
|
506
506
|
overnight drives.
|
|
507
507
|
- [`docs/PHONE_WEBAPP.md`](docs/PHONE_WEBAPP.md) — build and serve the phone control-center PWA
|
|
508
508
|
over Tailscale.
|
|
509
|
+
- [`docs/ADR_COORD_WEB_DIST.md`](docs/ADR_COORD_WEB_DIST.md) — how a built `coord-web` bundle
|
|
510
|
+
reaches the daemon host, and the alternatives rejected.
|
|
509
511
|
- [`docs/AGENT_OPERATIONS.md`](docs/AGENT_OPERATIONS.md) — agent install, upgrade, and
|
|
510
512
|
releasing to PyPI.
|
|
511
513
|
- [`docs/OPERATING_GOTCHAS.md`](docs/OPERATING_GOTCHAS.md) — traps that cost a real dispatch or
|
|
@@ -466,6 +466,8 @@ after publication.
|
|
|
466
466
|
overnight drives.
|
|
467
467
|
- [`docs/PHONE_WEBAPP.md`](docs/PHONE_WEBAPP.md) — build and serve the phone control-center PWA
|
|
468
468
|
over Tailscale.
|
|
469
|
+
- [`docs/ADR_COORD_WEB_DIST.md`](docs/ADR_COORD_WEB_DIST.md) — how a built `coord-web` bundle
|
|
470
|
+
reaches the daemon host, and the alternatives rejected.
|
|
469
471
|
- [`docs/AGENT_OPERATIONS.md`](docs/AGENT_OPERATIONS.md) — agent install, upgrade, and
|
|
470
472
|
releasing to PyPI.
|
|
471
473
|
- [`docs/OPERATING_GOTCHAS.md`](docs/OPERATING_GOTCHAS.md) — traps that cost a real dispatch or
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: code-coordinator
|
|
3
|
-
Version: 0.5.
|
|
3
|
+
Version: 0.5.148
|
|
4
4
|
Summary: Coordinate Claude Code workers across multiple machines and repos.
|
|
5
5
|
Author-email: John Donaghy <johnfdonaghy@gmail.com>
|
|
6
6
|
License-Expression: LicenseRef-FSL-1.1-MIT
|
|
@@ -506,6 +506,8 @@ after publication.
|
|
|
506
506
|
overnight drives.
|
|
507
507
|
- [`docs/PHONE_WEBAPP.md`](docs/PHONE_WEBAPP.md) — build and serve the phone control-center PWA
|
|
508
508
|
over Tailscale.
|
|
509
|
+
- [`docs/ADR_COORD_WEB_DIST.md`](docs/ADR_COORD_WEB_DIST.md) — how a built `coord-web` bundle
|
|
510
|
+
reaches the daemon host, and the alternatives rejected.
|
|
509
511
|
- [`docs/AGENT_OPERATIONS.md`](docs/AGENT_OPERATIONS.md) — agent install, upgrade, and
|
|
510
512
|
releasing to PyPI.
|
|
511
513
|
- [`docs/OPERATING_GOTCHAS.md`](docs/OPERATING_GOTCHAS.md) — traps that cost a real dispatch or
|
|
@@ -404,7 +404,7 @@ def web(
|
|
|
404
404
|
# #1237: function-local + guarded — see _start_agent_server for why.
|
|
405
405
|
with server_extra_guard("web"):
|
|
406
406
|
import uvicorn
|
|
407
|
-
from coord.dashboard.server import build_app
|
|
407
|
+
from coord.dashboard.server import build_app, dist_has_bundle
|
|
408
408
|
from coord.dashboard.terminal import resolve_web_token
|
|
409
409
|
|
|
410
410
|
fixture = None
|
|
@@ -438,7 +438,26 @@ def web(
|
|
|
438
438
|
app = build_app(cfg, token=token, fixture=fixture, dist_path=dist_path)
|
|
439
439
|
click.echo(f"coord web: dashboard at http://{bind_host}:{bind_port}")
|
|
440
440
|
if dist_path is not None:
|
|
441
|
-
|
|
441
|
+
# #2003: this used to unconditionally claim "serving webapp bundle
|
|
442
|
+
# from {dist_path}" even when that path was missing or empty — the
|
|
443
|
+
# server itself silently falls back to the legacy single-file
|
|
444
|
+
# dashboard in that case (build_app / index()), so the operator saw
|
|
445
|
+
# a success message for what was actually a silent regression to the
|
|
446
|
+
# legacy UI. Share the exact predicate build_app's index() route uses
|
|
447
|
+
# (dist_has_bundle) so this message can never drift from what
|
|
448
|
+
# actually gets served (#2096: two surfaces answering the same
|
|
449
|
+
# question must call the same function).
|
|
450
|
+
if dist_has_bundle(dist_path):
|
|
451
|
+
click.echo(f" serving webapp bundle from {dist_path} (#1543)")
|
|
452
|
+
else:
|
|
453
|
+
click.echo(
|
|
454
|
+
f" warning: --dist {dist_path} has no index.html (missing "
|
|
455
|
+
"or empty directory) — falling back to the legacy "
|
|
456
|
+
"single-file dashboard, NOT the bundle you pointed at. "
|
|
457
|
+
"Check the path / the build hook that populates it "
|
|
458
|
+
"(#2003).",
|
|
459
|
+
err=True,
|
|
460
|
+
)
|
|
442
461
|
if fixture is not None:
|
|
443
462
|
click.echo(
|
|
444
463
|
f" fixture mode: seeded board from {fixture_path} — reads are "
|
|
@@ -46,6 +46,22 @@ DASHBOARD_DIR = Path(__file__).parent
|
|
|
46
46
|
# that existing behaviour (and the test suite) is completely unaffected.
|
|
47
47
|
WEBAPP_DIST = DASHBOARD_DIR / "webapp" / "dist"
|
|
48
48
|
|
|
49
|
+
|
|
50
|
+
def dist_has_bundle(dist_path: Path) -> bool:
|
|
51
|
+
"""Does ``dist_path`` contain a servable built webapp bundle?
|
|
52
|
+
|
|
53
|
+
This is the single definition of "valid bundle" for the dashboard: the
|
|
54
|
+
``index()`` route below uses it to decide whether to serve the built
|
|
55
|
+
React app or fall back to the legacy single-file dashboard, and
|
|
56
|
+
``coord web``'s CLI (coord/commands/lifecycle.py) uses it to decide
|
|
57
|
+
whether to print a success or warning message. Both call sites MUST
|
|
58
|
+
share this function rather than re-deriving the check, so the CLI's
|
|
59
|
+
message can never drift from what the server actually serves (#2003,
|
|
60
|
+
epic #2096).
|
|
61
|
+
"""
|
|
62
|
+
return (dist_path / "index.html").exists()
|
|
63
|
+
|
|
64
|
+
|
|
49
65
|
# How often (seconds) the background poller queries agent servers.
|
|
50
66
|
_POLL_INTERVAL = 30.0
|
|
51
67
|
# How long (seconds) an assignment must be running with no agent record before
|
|
@@ -698,7 +714,7 @@ def build_app(
|
|
|
698
714
|
# Serve the built React webapp when available; fall back to the legacy
|
|
699
715
|
# single-file dashboard so existing behaviour is entirely unchanged.
|
|
700
716
|
spa_index = webapp_dist / "index.html"
|
|
701
|
-
html = spa_index.read_text() if
|
|
717
|
+
html = spa_index.read_text() if dist_has_bundle(webapp_dist) else (DASHBOARD_DIR / "index.html").read_text()
|
|
702
718
|
return HTMLResponse(html)
|
|
703
719
|
|
|
704
720
|
async def api_board(request: Request) -> JSONResponse:
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
# ADR: How a built `coord-web` bundle reaches the daemon host
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted
|
|
4
|
+
**Date:** 2026-08-18
|
|
5
|
+
**Issue:** #2004 (UX-2, Phase 1 of milestone #62, epic #2002). Blocks UX-4
|
|
6
|
+
("CI must know what it publishes") and UX-7.
|
|
7
|
+
|
|
8
|
+
## Context
|
|
9
|
+
|
|
10
|
+
`coord/dashboard/webapp/**` is moving out of this repo into its own
|
|
11
|
+
`coord-web` repo. Today, before that split, the same question already has a
|
|
12
|
+
shipped answer: **[`docs/PHONE_WEBAPP.md`](PHONE_WEBAPP.md), "Going live
|
|
13
|
+
automatically (#1543)."** `deploy/coord-web-dist-build.timer` fires every 10
|
|
14
|
+
minutes (retuned from 1 minute by #2122; see that unit's header), fetches
|
|
15
|
+
`origin/main` read-only, builds it in a dedicated worktree
|
|
16
|
+
(`~/.coord-web-checkout`), health-checks the result on a scratch port before
|
|
17
|
+
ever publishing it (#1560), and atomically repoints `~/coord-web-dist` —
|
|
18
|
+
which `coord web --dist` serves — at the new release. A one-command rollback
|
|
19
|
+
(`coord-web-rollback.sh`) with a rollback-sentinel anti-flap guard exists for
|
|
20
|
+
the class of bug the health check can't see. `coord release verify` already
|
|
21
|
+
has a lane for it: `webapp_bundle` (#1834 lane 5), which grades the live
|
|
22
|
+
bundle's staleness against the `coord/dashboard/webapp/` source tree it
|
|
23
|
+
claims to be built from — deliberately *not* against `--expected`/PyPI,
|
|
24
|
+
because the bundle is versioned by `origin/main`'s SHA on its own continuous
|
|
25
|
+
publish timer, decoupled on purpose from the `~/.coord-venv` release
|
|
26
|
+
cadence. `webapp_build_heartbeat` (#2122) catches the timer going silently
|
|
27
|
+
dead, independent of whether there's unbuilt source to expose it.
|
|
28
|
+
|
|
29
|
+
The question #2004 poses is really: **once the thing that timer builds lives
|
|
30
|
+
in a different repo, does any of this change in kind, or only in which
|
|
31
|
+
repo(s) it points at?**
|
|
32
|
+
|
|
33
|
+
## Decision
|
|
34
|
+
|
|
35
|
+
**Extend the existing mechanism to track `coord-web`'s `main`, instead of
|
|
36
|
+
`coord/dashboard/webapp/` inside this repo.** This is Option 1 from the
|
|
37
|
+
issue, and it is not a new lane so much as a redirection of a lane this
|
|
38
|
+
fleet already built, hardened, and has a release-verify check for.
|
|
39
|
+
|
|
40
|
+
Concretely, once the split lands:
|
|
41
|
+
|
|
42
|
+
- `coord-web-dist-build.sh`'s `BASE_CHECKOUT`/`WEBAPP_CHECKOUT` point at a
|
|
43
|
+
dedicated clone of `coord-web` (never the operator's own checkout, same
|
|
44
|
+
rule #1543 already enforces) instead of a worktree of this repo.
|
|
45
|
+
- The build step becomes `npm ci && npm run build` at `coord-web`'s repo
|
|
46
|
+
root instead of `coord/dashboard/webapp/`.
|
|
47
|
+
- The health-check-before-cutover, atomic symlink publish, rollback script,
|
|
48
|
+
and rollback-sentinel guard carry over **unchanged** — none of that logic
|
|
49
|
+
is specific to which repo it's building.
|
|
50
|
+
- `coord.health.checks.deploy_lane_facts.resolve_webapp_source_dir` (which
|
|
51
|
+
scans `ctx.checkouts` for a directory that looks like the webapp source)
|
|
52
|
+
gets pointed at a `coord-web` checkout's layout instead of
|
|
53
|
+
`<checkout>/coord/dashboard/webapp/src`. The `webapp_bundle` check's
|
|
54
|
+
*shape* — dist mtime vs. source mtime, WARN on staleness, never a version
|
|
55
|
+
comparison — does not change; only the path it looks under does.
|
|
56
|
+
- The PyPI-wheel-bundled fallback path (`coord/dashboard/webapp/dist`
|
|
57
|
+
vendored into `claude-coordinator`'s own release, #758) stays, unchanged
|
|
58
|
+
in role: it is the answer for `pip install code-coordinator` on a machine
|
|
59
|
+
with no `--dist` configured (fresh installs, CI, one-off dev boxes), not
|
|
60
|
+
the primary path to a running daemon host. This is Option 4, kept
|
|
61
|
+
deliberately as the fallback it already is today rather than promoted to
|
|
62
|
+
primary — see "Rejected alternatives" below for why it can't be primary
|
|
63
|
+
post-split.
|
|
64
|
+
|
|
65
|
+
## Rejected alternatives
|
|
66
|
+
|
|
67
|
+
**Option 2 — GitHub release artifact (tarball per `coord-web` release).**
|
|
68
|
+
Versioned and auditable, but it reintroduces exactly the coupling #1543 was
|
|
69
|
+
built to remove: a webapp fix would sit merged-but-not-live until someone
|
|
70
|
+
cuts a release, and nothing today gives that step the ~10-minute, unattended
|
|
71
|
+
cadence the timer already provides. It would also need the health-check
|
|
72
|
+
gate and rollback machinery rebuilt around a fetch/verify/unpack step
|
|
73
|
+
instead of a `git fetch` + worktree build — real new surface for no
|
|
74
|
+
capability the current mechanism lacks. Revisit if `coord-web` ever needs a
|
|
75
|
+
public, pinned distribution channel independent of the daemon host (it
|
|
76
|
+
doesn't today).
|
|
77
|
+
|
|
78
|
+
**Option 3 — npm package.** Same coupling-to-publish-cadence problem as
|
|
79
|
+
Option 2, plus it adds a registry-auth and install-on-host step to a
|
|
80
|
+
deploy path that currently needs neither. No requirement in this issue
|
|
81
|
+
calls for the bundle to be consumable outside this fleet's own daemon host,
|
|
82
|
+
which is the only scenario where an npm package would earn its cost back.
|
|
83
|
+
|
|
84
|
+
**Option 4 — vendored at `claude-coordinator` release time, promoted to
|
|
85
|
+
primary.** Rejected as the *primary* path because it re-couples the two
|
|
86
|
+
repos' release cadences — the coupling the split (epic #2002) exists to
|
|
87
|
+
remove. A `coord/dashboard/webapp/**` merge would go live only on
|
|
88
|
+
`claude-coordinator`'s next PyPI release, not within ~10 minutes of merging.
|
|
89
|
+
Kept as the fallback, because that's a real, already-solved problem
|
|
90
|
+
(bootstrapping a `--dist`-less host, or a fresh install) distinct from
|
|
91
|
+
"how does a live daemon host stay current," and downgrading it doesn't cost
|
|
92
|
+
anything the fleet needs today.
|
|
93
|
+
|
|
94
|
+
**Why Option 1 is not "a fifth silent lane."** The issue's core objection —
|
|
95
|
+
this fleet already has four deploy lanes that go stale with no signal
|
|
96
|
+
(agent venv, `coord-serve`, local `cargo build`, `~/.coord-cli-venv`) — is
|
|
97
|
+
real, but those four go stale because going live requires an *operator* to
|
|
98
|
+
re-run an install step (`pip install --upgrade`, `cargo build`) and nothing
|
|
99
|
+
polls to catch it if they don't. The webapp-dist lane is structurally
|
|
100
|
+
different: it already has (a) an autonomous timer instead of an
|
|
101
|
+
operator-triggered pull, (b) a pre-cutover health check that refuses to
|
|
102
|
+
publish a broken build in the first place, (c) a heartbeat file
|
|
103
|
+
`coord health`/`coord release verify` already read to distinguish "up to
|
|
104
|
+
date" from "the trigger died silently," and (d) a release-verify lane
|
|
105
|
+
(`webapp_bundle`) already wired into the fleet health surface. Extending it
|
|
106
|
+
to a second repo carries all four properties across unchanged — it doesn't
|
|
107
|
+
have to invent them the way a from-scratch Option 2/3 pipeline would.
|
|
108
|
+
|
|
109
|
+
## Staleness across the split is a different question than staleness today
|
|
110
|
+
|
|
111
|
+
Pre-split, `coord-web-dist-build.timer` and `~/.coord-venv` build off the
|
|
112
|
+
*same* repo, so "is the live bundle SHA an ancestor of what the daemon was
|
|
113
|
+
built from" is at least answerable in principle. Post-split, `coord-serve`
|
|
114
|
+
(from `claude-coordinator`, versioned by PyPI release) and the webapp bundle
|
|
115
|
+
(from `coord-web`, versioned by its own `main` SHA) are two independently
|
|
116
|
+
released artifacts with **no shared version number** — and per the
|
|
117
|
+
`webapp_bundle` design already in `release_verify.py`, that's intentional:
|
|
118
|
+
grading the bundle against `--expected`/PyPI would "manufacture permanent,
|
|
119
|
+
meaningless skew rather than report a real one." That reasoning holds even
|
|
120
|
+
harder once the source repos are different.
|
|
121
|
+
|
|
122
|
+
What that does *not* cover, and what genuinely is new here: a phone hitting
|
|
123
|
+
`http://dellserver:7434` can land on a `coord-web` bundle that expects an
|
|
124
|
+
API shape `coord-serve` hasn't shipped yet (or vice versa), because nothing
|
|
125
|
+
before this ADR pins a compatibility floor between the two repos'
|
|
126
|
+
independent cadences. This is a real risk the split introduces — it isn't
|
|
127
|
+
solved by choosing Option 1 over 2/3/4, and it isn't this ADR's job to
|
|
128
|
+
solve, but it should be named so UX-4/UX-7 pick it up rather than
|
|
129
|
+
rediscover it: the daemon already reports its own version
|
|
130
|
+
(`coord/dashboard/server.py`'s `version=__version__`); the cheapest fix is
|
|
131
|
+
likely a minimum-compatible-API marker the webapp checks against that value
|
|
132
|
+
at load and degrades visibly (banner, not a silent break) on mismatch,
|
|
133
|
+
rather than trying to keep the two repos' releases in lockstep.
|
|
134
|
+
|
|
135
|
+
Propagation lag itself (a phone briefly on a bundle one merge behind the
|
|
136
|
+
daemon, or vice versa) is not new and not a defect — it's the same ~10-minute
|
|
137
|
+
window the timer already runs at for the single-repo case (retuned from the
|
|
138
|
+
original 1-minute cadence #1543 documents; see #2122 and
|
|
139
|
+
`deploy/coord-web-dist-build.timer`'s header for why). It stays detectable
|
|
140
|
+
the same way: the release directory is named after the
|
|
141
|
+
`coord-web` SHA it was built from, and `webapp_build_heartbeat` proves the
|
|
142
|
+
timer is still alive.
|
|
143
|
+
|
|
144
|
+
## Consequences
|
|
145
|
+
|
|
146
|
+
- `coord release verify`'s `webapp_bundle` lane keeps working post-split
|
|
147
|
+
with a path/repo-target change, not a redesign — satisfying this issue's
|
|
148
|
+
"whichever option wins should be assertable by it" requirement at close
|
|
149
|
+
to zero incremental cost.
|
|
150
|
+
- The daemon host needs a second dedicated checkout (`coord-web`, alongside
|
|
151
|
+
whatever `claude-coordinator` checkout it already keeps for other lanes)
|
|
152
|
+
and a second instance of the build-timer/rollback pairing pointed at it.
|
|
153
|
+
That's real setup work, tracked under UX-4/UX-7, not a design question.
|
|
154
|
+
- A `coord-web`↔`coord-serve` compatibility floor is an explicitly named
|
|
155
|
+
open follow-up, not solved here.
|
|
156
|
+
- Options 2 and 3 remain available to revisit if `coord-web` ever needs a
|
|
157
|
+
distribution channel independent of this fleet's own daemon host — no
|
|
158
|
+
requirement in scope today calls for that.
|
|
@@ -126,6 +126,12 @@ cd coord/dashboard/webapp && npm run build
|
|
|
126
126
|
|
|
127
127
|
---
|
|
128
128
|
|
|
129
|
+
> **Repo split (#2004):** `coord/dashboard/webapp/**` is moving to its own
|
|
130
|
+
> `coord-web` repo (epic #2002). The mechanism below is the answer for how a
|
|
131
|
+
> built bundle reaches this daemon host both before and after that move —
|
|
132
|
+
> see [`docs/ADR_COORD_WEB_DIST.md`](ADR_COORD_WEB_DIST.md) for the decision
|
|
133
|
+
> and the rejected alternatives.
|
|
134
|
+
|
|
129
135
|
## Going live automatically (#1543): merged main, not release cadence
|
|
130
136
|
|
|
131
137
|
**On dellserver in production, a merged `coord/dashboard/webapp/**` change
|
|
@@ -11,7 +11,7 @@ import pytest
|
|
|
11
11
|
from starlette.testclient import TestClient
|
|
12
12
|
|
|
13
13
|
from coord.config import Config
|
|
14
|
-
from coord.dashboard.server import build_app
|
|
14
|
+
from coord.dashboard.server import build_app, dist_has_bundle
|
|
15
15
|
from coord.models import Assignment, Board, Machine, Proposal, Repo
|
|
16
16
|
from coord.state import save_board
|
|
17
17
|
|
|
@@ -1559,6 +1559,151 @@ class TestCLI:
|
|
|
1559
1559
|
)
|
|
1560
1560
|
assert captured.get("dist_path") == Path("/tmp/some-dist-dir")
|
|
1561
1561
|
|
|
1562
|
+
@staticmethod
|
|
1563
|
+
def _config_file(tmp_path: Path) -> Path:
|
|
1564
|
+
config_file = tmp_path / "coordinator.yml"
|
|
1565
|
+
config_file.write_text(
|
|
1566
|
+
"repos:\n"
|
|
1567
|
+
" - name: api\n"
|
|
1568
|
+
" github: acme/api\n"
|
|
1569
|
+
" default_branch: main\n"
|
|
1570
|
+
"machines:\n"
|
|
1571
|
+
" - name: laptop\n"
|
|
1572
|
+
" host: laptop.tailnet\n"
|
|
1573
|
+
" repos: [api]\n"
|
|
1574
|
+
" repo_paths:\n"
|
|
1575
|
+
" api: /tmp/api\n"
|
|
1576
|
+
)
|
|
1577
|
+
return config_file
|
|
1578
|
+
|
|
1579
|
+
def test_web_dist_env_var_honored(self, tmp_path: Path, coord_db) -> None:
|
|
1580
|
+
"""#2003: ``$COORD_WEB_DIST`` alone (no ``--dist`` flag) must thread
|
|
1581
|
+
through to ``build_app(dist_path=...)`` -- the env-var half of the
|
|
1582
|
+
seam a systemd unit / build-hook timer relies on, since it can't pass
|
|
1583
|
+
a CLI flag."""
|
|
1584
|
+
from click.testing import CliRunner
|
|
1585
|
+
from coord.cli import main
|
|
1586
|
+
|
|
1587
|
+
config_file = self._config_file(tmp_path)
|
|
1588
|
+
env_dist = tmp_path / "env-dist"
|
|
1589
|
+
|
|
1590
|
+
captured = {}
|
|
1591
|
+
|
|
1592
|
+
def _fake_build_app(config, *, token=None, session_attacher=None, fixture=None, dist_path=None):
|
|
1593
|
+
captured["dist_path"] = dist_path
|
|
1594
|
+
raise SystemExit(0)
|
|
1595
|
+
|
|
1596
|
+
runner = CliRunner()
|
|
1597
|
+
with patch("coord.dashboard.server.build_app", _fake_build_app):
|
|
1598
|
+
runner.invoke(
|
|
1599
|
+
main,
|
|
1600
|
+
["web", "--config", str(config_file)],
|
|
1601
|
+
env={"COORD_WEB_DIST": str(env_dist)},
|
|
1602
|
+
catch_exceptions=True,
|
|
1603
|
+
)
|
|
1604
|
+
assert captured.get("dist_path") == env_dist
|
|
1605
|
+
|
|
1606
|
+
def test_web_dist_flag_overrides_env_var(self, tmp_path: Path, coord_db) -> None:
|
|
1607
|
+
"""#2003: precedence when both are set -- ``--dist`` wins over
|
|
1608
|
+
``$COORD_WEB_DIST`` (click's normal flag-over-envvar resolution,
|
|
1609
|
+
pinned here since this is the exact seam a misconfigured deploy
|
|
1610
|
+
would trip over silently)."""
|
|
1611
|
+
from click.testing import CliRunner
|
|
1612
|
+
from coord.cli import main
|
|
1613
|
+
|
|
1614
|
+
config_file = self._config_file(tmp_path)
|
|
1615
|
+
env_dist = tmp_path / "env-dist"
|
|
1616
|
+
flag_dist = tmp_path / "flag-dist"
|
|
1617
|
+
|
|
1618
|
+
captured = {}
|
|
1619
|
+
|
|
1620
|
+
def _fake_build_app(config, *, token=None, session_attacher=None, fixture=None, dist_path=None):
|
|
1621
|
+
captured["dist_path"] = dist_path
|
|
1622
|
+
raise SystemExit(0)
|
|
1623
|
+
|
|
1624
|
+
runner = CliRunner()
|
|
1625
|
+
with patch("coord.dashboard.server.build_app", _fake_build_app):
|
|
1626
|
+
runner.invoke(
|
|
1627
|
+
main,
|
|
1628
|
+
["web", "--config", str(config_file), "--dist", str(flag_dist)],
|
|
1629
|
+
env={"COORD_WEB_DIST": str(env_dist)},
|
|
1630
|
+
catch_exceptions=True,
|
|
1631
|
+
)
|
|
1632
|
+
assert captured.get("dist_path") == flag_dist
|
|
1633
|
+
assert captured.get("dist_path") != env_dist
|
|
1634
|
+
|
|
1635
|
+
def test_web_dist_missing_prints_loud_warning(self, tmp_path: Path, coord_db) -> None:
|
|
1636
|
+
"""#2003: the operationally important case -- ``--dist`` pointing at
|
|
1637
|
+
a directory that doesn't exist must print a clear warning, not the
|
|
1638
|
+
same success message a valid ``--dist`` gets. Before this fix `coord
|
|
1639
|
+
web` printed "serving webapp bundle from {path}" unconditionally,
|
|
1640
|
+
even though the server was silently falling back to the legacy
|
|
1641
|
+
single-file dashboard -- exactly the invisible regression #2003
|
|
1642
|
+
warns about."""
|
|
1643
|
+
from click.testing import CliRunner
|
|
1644
|
+
from coord.cli import main
|
|
1645
|
+
|
|
1646
|
+
config_file = self._config_file(tmp_path)
|
|
1647
|
+
missing_dist = tmp_path / "does-not-exist"
|
|
1648
|
+
|
|
1649
|
+
runner = CliRunner()
|
|
1650
|
+
# Let the real build_app run (cheap, no network); only bail out
|
|
1651
|
+
# before uvicorn.run would block forever serving the app.
|
|
1652
|
+
with patch("uvicorn.run", side_effect=SystemExit(0)):
|
|
1653
|
+
result = runner.invoke(
|
|
1654
|
+
main,
|
|
1655
|
+
["web", "--config", str(config_file), "--dist", str(missing_dist)],
|
|
1656
|
+
catch_exceptions=True,
|
|
1657
|
+
)
|
|
1658
|
+
assert "warning" in result.output.lower()
|
|
1659
|
+
assert str(missing_dist) in result.output
|
|
1660
|
+
assert "legacy" in result.output.lower()
|
|
1661
|
+
assert f"serving webapp bundle from {missing_dist}" not in result.output
|
|
1662
|
+
|
|
1663
|
+
def test_web_dist_empty_dir_prints_loud_warning(self, tmp_path: Path, coord_db) -> None:
|
|
1664
|
+
"""Same as above but the directory exists and is merely empty (no
|
|
1665
|
+
index.html) -- an interrupted/failed build, not a typo'd path."""
|
|
1666
|
+
from click.testing import CliRunner
|
|
1667
|
+
from coord.cli import main
|
|
1668
|
+
|
|
1669
|
+
config_file = self._config_file(tmp_path)
|
|
1670
|
+
empty_dist = tmp_path / "empty-dist"
|
|
1671
|
+
empty_dist.mkdir()
|
|
1672
|
+
|
|
1673
|
+
runner = CliRunner()
|
|
1674
|
+
with patch("uvicorn.run", side_effect=SystemExit(0)):
|
|
1675
|
+
result = runner.invoke(
|
|
1676
|
+
main,
|
|
1677
|
+
["web", "--config", str(config_file), "--dist", str(empty_dist)],
|
|
1678
|
+
catch_exceptions=True,
|
|
1679
|
+
)
|
|
1680
|
+
assert "warning" in result.output.lower()
|
|
1681
|
+
assert f"serving webapp bundle from {empty_dist}" not in result.output
|
|
1682
|
+
|
|
1683
|
+
def test_web_dist_valid_prints_success_not_warning(self, tmp_path: Path, coord_db) -> None:
|
|
1684
|
+
"""Contrast case: a valid ``--dist`` (real index.html present) keeps
|
|
1685
|
+
printing the plain success message with no warning noise."""
|
|
1686
|
+
from click.testing import CliRunner
|
|
1687
|
+
from coord.cli import main
|
|
1688
|
+
|
|
1689
|
+
config_file = self._config_file(tmp_path)
|
|
1690
|
+
valid_dist = tmp_path / "valid-dist"
|
|
1691
|
+
valid_dist.mkdir()
|
|
1692
|
+
(valid_dist / "index.html").write_text("<html></html>")
|
|
1693
|
+
|
|
1694
|
+
runner = CliRunner()
|
|
1695
|
+
with patch("uvicorn.run", side_effect=SystemExit(0)):
|
|
1696
|
+
result = runner.invoke(
|
|
1697
|
+
main,
|
|
1698
|
+
["web", "--config", str(config_file), "--dist", str(valid_dist)],
|
|
1699
|
+
catch_exceptions=True,
|
|
1700
|
+
)
|
|
1701
|
+
assert f"serving webapp bundle from {valid_dist}" in result.output
|
|
1702
|
+
# No dist-related warning noise -- the unrelated "no bearer token"
|
|
1703
|
+
# warning is expected (no --token passed) and out of scope here.
|
|
1704
|
+
assert "no index.html" not in result.output.lower()
|
|
1705
|
+
assert "falling back to the legacy" not in result.output.lower()
|
|
1706
|
+
|
|
1562
1707
|
|
|
1563
1708
|
class TestSSEEvents:
|
|
1564
1709
|
"""Tests for /events SSE endpoint (issue #214)."""
|
|
@@ -1804,3 +1949,69 @@ class TestDistPathOverride:
|
|
|
1804
1949
|
r = client.get("/")
|
|
1805
1950
|
assert r.status_code == 200
|
|
1806
1951
|
assert "coord module default" in r.text
|
|
1952
|
+
|
|
1953
|
+
def test_dist_path_wins_over_bundled_webapp_dist(self, tmp_path: Path) -> None:
|
|
1954
|
+
"""#2003: when BOTH the bundled ``coord/dashboard/webapp/dist`` and an
|
|
1955
|
+
explicit ``dist_path`` resolve to real bundles, the explicit override
|
|
1956
|
+
wins -- pinning the precedence a `coord-web-dist-build.sh` release
|
|
1957
|
+
depends on (it must not silently keep serving a stale packaged
|
|
1958
|
+
dist/ that happens to also exist in the venv)."""
|
|
1959
|
+
bundled = tmp_path / "bundled"
|
|
1960
|
+
bundled.mkdir()
|
|
1961
|
+
(bundled / "index.html").write_text("<html><title>stale bundled dist</title></html>")
|
|
1962
|
+
|
|
1963
|
+
override = self._make_dist(tmp_path, "<html><title>coord dist override</title></html>")
|
|
1964
|
+
|
|
1965
|
+
with patch("coord.dashboard.server.WEBAPP_DIST", bundled):
|
|
1966
|
+
client = TestClient(build_app(_config(), dist_path=override))
|
|
1967
|
+
r = client.get("/")
|
|
1968
|
+
assert r.status_code == 200
|
|
1969
|
+
assert "coord dist override" in r.text
|
|
1970
|
+
assert "stale bundled dist" not in r.text
|
|
1971
|
+
|
|
1972
|
+
def test_missing_dist_path_falls_back_to_legacy_dashboard(self, tmp_path: Path) -> None:
|
|
1973
|
+
"""#2003: a ``--dist`` pointing at a directory that does not exist at
|
|
1974
|
+
all must not error or serve a stale bundle -- it falls back to the
|
|
1975
|
+
legacy single-file dashboard, same as the no-override default. This
|
|
1976
|
+
pins the HTTP-layer half of the fallback; ``TestCLI`` below pins that
|
|
1977
|
+
the CLI surfaces a loud warning for this case rather than the plain
|
|
1978
|
+
success message it prints for a valid ``--dist``."""
|
|
1979
|
+
missing = tmp_path / "does-not-exist"
|
|
1980
|
+
client = TestClient(build_app(_config(), dist_path=missing))
|
|
1981
|
+
r = client.get("/")
|
|
1982
|
+
assert r.status_code == 200
|
|
1983
|
+
assert "coord dashboard" in r.text
|
|
1984
|
+
assert "coord dist override" not in r.text
|
|
1985
|
+
|
|
1986
|
+
def test_empty_dist_path_directory_falls_back_to_legacy_dashboard(self, tmp_path: Path) -> None:
|
|
1987
|
+
"""Same as above but the directory exists (e.g. an interrupted build
|
|
1988
|
+
left an empty dir) rather than being wholly absent -- both must fail
|
|
1989
|
+
the same way, not just the "doesn't exist" case."""
|
|
1990
|
+
empty = tmp_path / "empty-dist"
|
|
1991
|
+
empty.mkdir()
|
|
1992
|
+
client = TestClient(build_app(_config(), dist_path=empty))
|
|
1993
|
+
r = client.get("/")
|
|
1994
|
+
assert r.status_code == 200
|
|
1995
|
+
assert "coord dashboard" in r.text
|
|
1996
|
+
|
|
1997
|
+
|
|
1998
|
+
class TestDistHasBundle:
|
|
1999
|
+
"""#2003 (epic #2096): `dist_has_bundle` is the ONE predicate both
|
|
2000
|
+
`index()` (this module) and `coord web`'s CLI (coord/commands/lifecycle.py)
|
|
2001
|
+
call to decide whether a dist directory has a servable bundle -- pinning
|
|
2002
|
+
it directly here guards against the two call sites drifting back apart
|
|
2003
|
+
into independent re-derivations of the same check."""
|
|
2004
|
+
|
|
2005
|
+
def test_true_when_index_html_present(self, tmp_path: Path) -> None:
|
|
2006
|
+
dist = tmp_path / "dist"
|
|
2007
|
+
dist.mkdir()
|
|
2008
|
+
(dist / "index.html").write_text("<html></html>")
|
|
2009
|
+
assert dist_has_bundle(dist) is True
|
|
2010
|
+
|
|
2011
|
+
def test_false_when_directory_missing(self, tmp_path: Path) -> None:
|
|
2012
|
+
assert dist_has_bundle(tmp_path / "does-not-exist") is False
|
|
2013
|
+
|
|
2014
|
+
def test_false_when_directory_empty(self, tmp_path: Path) -> None:
|
|
2015
|
+
empty = tmp_path / "empty"
|
|
2016
|
+
empty.mkdir()
|
|
2017
|
+
assert dist_has_bundle(empty) is False
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{code_coordinator-0.5.147 → code_coordinator-0.5.148}/code_coordinator.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.147 → code_coordinator-0.5.148}/code_coordinator.egg-info/entry_points.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.147 → code_coordinator-0.5.148}/code_coordinator.egg-info/requires.txt
RENAMED
|
File without changes
|
{code_coordinator-0.5.147 → code_coordinator-0.5.148}/code_coordinator.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|