code-coordinator 0.5.146__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.146 → code_coordinator-0.5.148}/PKG-INFO +3 -1
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/README.md +2 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/PKG-INFO +3 -1
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/SOURCES.txt +1 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/scm_file_list.json +1 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/drive.py +25 -1
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/lifecycle.py +21 -2
- {code_coordinator-0.5.146 → 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.146 → code_coordinator-0.5.148}/docs/PHONE_WEBAPP.md +6 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_decide.py +72 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dashboard.py +212 -1
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/dialogs.rs +7 -16
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/drive_queue.rs +193 -4
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/escalation.rs +32 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/workflows/acceptance-web.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/.gitignore +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/CLAUDE.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/GOAL.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/LICENSE +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/MANIFEST.in +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/__init__.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/agent.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/audit.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/block_log.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/board_service.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/brain.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/claim.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/cli.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/client.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/comments.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/config.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dao.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/db.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/deps.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/drive.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/events.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/filelock.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/freshness.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/gates.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/goal.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/context.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/models.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/render.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/health/units.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/hooks.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/interactive.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/models.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/network.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/notify.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/openapi.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/parentage.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/plans.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/progress.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/release_window.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/reports.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/review.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/smoke.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/split_work.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/state.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/test_author.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/test_report.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/usage.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/install-agent.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/pyproject.toml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/setup.cfg +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/__init__.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/conftest.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_config.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_db.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_events.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_init.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_models.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_network.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_session.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_split.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_state.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.146 → code_coordinator-0.5.148}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.146 → 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
|
|
@@ -692,12 +692,22 @@ def escalate_run(repo: str, issue: int, dismiss: bool, config_path: Path) -> Non
|
|
|
692
692
|
"option or a drive-queue-only card; see the command's docstring."
|
|
693
693
|
),
|
|
694
694
|
)
|
|
695
|
+
@click.option(
|
|
696
|
+
"--list", "list_only", is_flag=True, default=False,
|
|
697
|
+
help=(
|
|
698
|
+
"Print REPO ISSUE's numbered option list (same options "
|
|
699
|
+
"`coord report run decisions`/`coord escalate list` would show for "
|
|
700
|
+
"this row) and exit — runs nothing. #2375: the discovery path the "
|
|
701
|
+
"bare/indexed invocation deliberately doesn't provide."
|
|
702
|
+
),
|
|
703
|
+
)
|
|
695
704
|
@_CONFIG_OPTION
|
|
696
705
|
def decide(
|
|
697
706
|
repo: str,
|
|
698
707
|
issue: int,
|
|
699
708
|
option_index: int | None,
|
|
700
709
|
dismiss: bool,
|
|
710
|
+
list_only: bool,
|
|
701
711
|
config_path: Path,
|
|
702
712
|
) -> None:
|
|
703
713
|
"""Run one option from REPO ISSUE's `decisions` report card.
|
|
@@ -724,8 +734,16 @@ def decide(
|
|
|
724
734
|
reappearance-or-not on the next `coord report run decisions` is the
|
|
725
735
|
confirmation signal, not a second "resolved" state that could go
|
|
726
736
|
stale or lie.
|
|
737
|
+
|
|
738
|
+
#2375: `--list` prints this same card's numbered options and stops —
|
|
739
|
+
the discovery path for picking OPTION_INDEX without running anything.
|
|
740
|
+
It is a NEW flag, not a change to the bare/no-index contract above:
|
|
741
|
+
that contract (#2370's own shipped acceptance criterion — no
|
|
742
|
+
OPTION_INDEX behaves identically to `coord escalate run`) stays exactly
|
|
743
|
+
as it is, since the TUI's "Recommended" click and #2370's acceptance
|
|
744
|
+
test both depend on it firing immediately.
|
|
727
745
|
"""
|
|
728
|
-
from coord.reports import find_decision # noqa: PLC0415
|
|
746
|
+
from coord.reports import find_decision, format_option_cell # noqa: PLC0415
|
|
729
747
|
from coord.state import dismiss_drive_escalation # noqa: PLC0415
|
|
730
748
|
|
|
731
749
|
card = find_decision(repo, issue)
|
|
@@ -736,6 +754,12 @@ def decide(
|
|
|
736
754
|
if not options:
|
|
737
755
|
raise click.ClickException(f"decision card for {repo} #{issue} has no options")
|
|
738
756
|
|
|
757
|
+
if list_only:
|
|
758
|
+
click.echo(f"{repo} #{issue}: {len(options)} option(s)")
|
|
759
|
+
for i, opt in enumerate(options):
|
|
760
|
+
click.echo(f" {i}: {format_option_cell(opt)}")
|
|
761
|
+
return
|
|
762
|
+
|
|
739
763
|
if option_index is None:
|
|
740
764
|
index = next(
|
|
741
765
|
(i for i, opt in enumerate(options) if opt.get("recommended")), 0
|
|
@@ -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
|
|
@@ -206,6 +206,78 @@ def test_source2_card_explicit_index_runs_that_option_and_never_touches_escalati
|
|
|
206
206
|
assert state._get_drive_escalation_local("api", 55) is None
|
|
207
207
|
|
|
208
208
|
|
|
209
|
+
# ── --list: discovery path, executes nothing (#2375) ────────────────────────
|
|
210
|
+
|
|
211
|
+
|
|
212
|
+
def test_list_prints_numbered_options_and_runs_nothing_for_escalation_card(
|
|
213
|
+
coord_db, valid_config_path: Path, monkeypatch
|
|
214
|
+
):
|
|
215
|
+
state._record_drive_escalation_local(
|
|
216
|
+
"api", 7, stage="merge", reason="stuck", gate_readings="",
|
|
217
|
+
proposed_command="echo hi",
|
|
218
|
+
)
|
|
219
|
+
seen: dict = {}
|
|
220
|
+
monkeypatch.setattr("coord.commands.drive.subprocess.run", _fake_run(seen))
|
|
221
|
+
|
|
222
|
+
result = CliRunner().invoke(
|
|
223
|
+
main, ["decide", "api", "7", "--list", "--config", str(valid_config_path)]
|
|
224
|
+
)
|
|
225
|
+
assert result.exit_code == 0, result.output
|
|
226
|
+
assert "command" not in seen
|
|
227
|
+
assert "0:" in result.output and "Recommended: echo hi" in result.output
|
|
228
|
+
assert "1:" in result.output and "Inspect: coord escalate list --repo api" in result.output
|
|
229
|
+
# nothing dismissed either — --list never touches state
|
|
230
|
+
assert state._get_drive_escalation_local("api", 7) is not None
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
def test_list_prints_numbered_options_for_source2_card(
|
|
234
|
+
coord_db, valid_config_path: Path, monkeypatch
|
|
235
|
+
):
|
|
236
|
+
_seed_blocked_queue_row("api", 55, _TWO_OPTION_REASON)
|
|
237
|
+
seen: dict = {}
|
|
238
|
+
monkeypatch.setattr("coord.commands.drive.subprocess.run", _fake_run(seen))
|
|
239
|
+
|
|
240
|
+
result = CliRunner().invoke(
|
|
241
|
+
main, ["decide", "api", "55", "--list", "--config", str(valid_config_path)]
|
|
242
|
+
)
|
|
243
|
+
assert result.exit_code == 0, result.output
|
|
244
|
+
assert "command" not in seen
|
|
245
|
+
assert "coord log aid-1 --machine dellserver" in result.output
|
|
246
|
+
assert "echo remedy-command" in result.output
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def test_list_matches_the_decisions_report_options_exactly(
|
|
250
|
+
coord_db, valid_config_path: Path
|
|
251
|
+
):
|
|
252
|
+
"""#2375 acceptance: `--list`'s numbered options are the same ones
|
|
253
|
+
`coord report run decisions` (and thus `format_option_cell`) would show
|
|
254
|
+
for this same card, byte-for-byte."""
|
|
255
|
+
_seed_blocked_queue_row("api", 55, _TWO_OPTION_REASON)
|
|
256
|
+
|
|
257
|
+
result = CliRunner().invoke(
|
|
258
|
+
main, ["decide", "api", "55", "--list", "--config", str(valid_config_path)]
|
|
259
|
+
)
|
|
260
|
+
assert result.exit_code == 0, result.output
|
|
261
|
+
|
|
262
|
+
from coord.reports import format_option_cell
|
|
263
|
+
|
|
264
|
+
report = run_decisions(repo="api")
|
|
265
|
+
card = next(r for r in report.rows if r["issue"] == 55)
|
|
266
|
+
for i, opt in enumerate(card["options"]):
|
|
267
|
+
assert f" {i}: {format_option_cell(opt)}" in result.output
|
|
268
|
+
|
|
269
|
+
|
|
270
|
+
def test_list_with_no_decision_on_file_is_a_clean_error(
|
|
271
|
+
coord_db, valid_config_path: Path
|
|
272
|
+
):
|
|
273
|
+
result = CliRunner().invoke(
|
|
274
|
+
main, ["decide", "api", "7", "--list", "--config", str(valid_config_path)]
|
|
275
|
+
)
|
|
276
|
+
assert result.exit_code != 0
|
|
277
|
+
assert "no decision on file" in result.output
|
|
278
|
+
assert "Traceback" not in result.output
|
|
279
|
+
|
|
280
|
+
|
|
209
281
|
def test_executed_command_is_byte_identical_to_the_decisions_report_option(
|
|
210
282
|
coord_db, valid_config_path: Path, monkeypatch
|
|
211
283
|
):
|