code-coordinator 0.5.147__tar.gz → 0.5.150__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/PKG-INFO +3 -1
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/README.md +2 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/PKG-INFO +3 -1
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/SOURCES.txt +2 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/scm_file_list.json +2 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/lifecycle.py +21 -2
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/server.py +17 -1
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/merge_queue.py +16 -0
- code_coordinator-0.5.150/docs/ADR_COORD_WEB_DIST.md +158 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/PHONE_WEBAPP.md +6 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/manifest.yml +127 -0
- code_coordinator-0.5.150/tests/acceptance/ms-65/pipeline_tabs_2284.rs +778 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dashboard.py +212 -1
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/format.rs +75 -4
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/mod.rs +1 -1
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/pipeline.rs +97 -16
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/render.rs +13 -3
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/tests.rs +310 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/types.rs +24 -1
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/tests/acceptance.rs +1 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/workflows/acceptance-web.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/.gitignore +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/CLAUDE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/GOAL.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/LICENSE +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/MANIFEST.in +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/agent.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/audit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/block_log.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/board_service.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/brain.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/claim.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/cli.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/client.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/comments.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/config.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dao.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/db.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/deps.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/drive.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/events.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/filelock.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/freshness.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/gates.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/goal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/context.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/models.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/render.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/health/units.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/hooks.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/interactive.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/models.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/network.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/notify.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/openapi.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/parentage.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/plans.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/progress.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/release_window.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/reports.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/review.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/smoke.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/split_work.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/test_author.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/test_report.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/usage.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/install-agent.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/pyproject.toml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/setup.cfg +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/__init__.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/conftest.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_config.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_db.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_events.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_init.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_models.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_network.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_session.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_split.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_state.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.147 → code_coordinator-0.5.150}/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.150
|
|
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.150
|
|
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
|
|
@@ -365,6 +365,7 @@ deploy/coord-web-dist-build.timer
|
|
|
365
365
|
deploy/coord-web-rollback.sh
|
|
366
366
|
deploy/coord-web.service
|
|
367
367
|
deploy/node-shim.sh
|
|
368
|
+
docs/ADR_COORD_WEB_DIST.md
|
|
368
369
|
docs/AGENT_OPERATIONS.md
|
|
369
370
|
docs/ARCHITECTURE.md
|
|
370
371
|
docs/ARCH_SECURITY_GATES.md
|
|
@@ -795,6 +796,7 @@ tests/acceptance/ms-65/board_tabs_2282.rs
|
|
|
795
796
|
tests/acceptance/ms-65/board_tabs_close_2283.rs
|
|
796
797
|
tests/acceptance/ms-65/contract.md
|
|
797
798
|
tests/acceptance/ms-65/manifest.yml
|
|
799
|
+
tests/acceptance/ms-65/pipeline_tabs_2284.rs
|
|
798
800
|
tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen
|
|
799
801
|
tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen
|
|
800
802
|
tests/acceptance/ms-65/mocks/board-preview-tab.screen
|
{code_coordinator-0.5.147 → code_coordinator-0.5.150}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -343,6 +343,7 @@
|
|
|
343
343
|
"deploy/coord-web-rollback.sh",
|
|
344
344
|
"deploy/coord-web.service",
|
|
345
345
|
"deploy/node-shim.sh",
|
|
346
|
+
"docs/ADR_COORD_WEB_DIST.md",
|
|
346
347
|
"docs/AGENT_OPERATIONS.md",
|
|
347
348
|
"docs/ARCHITECTURE.md",
|
|
348
349
|
"docs/ARCH_SECURITY_GATES.md",
|
|
@@ -444,6 +445,7 @@
|
|
|
444
445
|
"tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen",
|
|
445
446
|
"tests/acceptance/ms-65/mocks/board-tabs-overflow.screen",
|
|
446
447
|
"tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen",
|
|
448
|
+
"tests/acceptance/ms-65/pipeline_tabs_2284.rs",
|
|
447
449
|
"tests/acceptance/ms-example/mocks/home-active.html",
|
|
448
450
|
"tests/conftest.py",
|
|
449
451
|
"tests/fixtures/board-pipeline-basic.json",
|
|
@@ -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:
|
|
@@ -3984,6 +3984,17 @@ class PlannedMerge:
|
|
|
3984
3984
|
# when no PR is open yet, or `ci_store` has no checks for this PR.
|
|
3985
3985
|
pr_number: int | None = None
|
|
3986
3986
|
ci_summary: "CiCheckSummary | None" = None
|
|
3987
|
+
# #2397: mirrors `config.merge.auto_drain` (default False) at plan-build
|
|
3988
|
+
# time — read-only exposure, no gate-logic change. The TUI's per-issue
|
|
3989
|
+
# Merge stage box needs this to tell "nothing retries until a human runs
|
|
3990
|
+
# `coord merge`" (auto_drain off) apart from "an automatic retry tick is
|
|
3991
|
+
# already handling this" (auto_drain on); today it has no way to know
|
|
3992
|
+
# and the box renders identically either way (issue #2397's incident:
|
|
3993
|
+
# `#2284`'s acceptance-authoring slice sat "pending — waiting 2:22" with
|
|
3994
|
+
# no signal that `merge.auto_drain: false` meant nothing was coming on
|
|
3995
|
+
# its own). Same value on every entry in one `plan()` call — it's a
|
|
3996
|
+
# single process-wide config flag, not per-entry state.
|
|
3997
|
+
auto_drain: bool = False
|
|
3987
3998
|
|
|
3988
3999
|
|
|
3989
4000
|
def _load_milestones_for_queue(
|
|
@@ -4058,6 +4069,10 @@ def plan(
|
|
|
4058
4069
|
"""
|
|
4059
4070
|
items = load_queue()
|
|
4060
4071
|
milestones = _load_milestones_for_queue(items)
|
|
4072
|
+
# #2397: read once, stamped on every entry below — see `PlannedMerge
|
|
4073
|
+
# .auto_drain`'s doc comment for why the TUI needs this alongside
|
|
4074
|
+
# `reason`.
|
|
4075
|
+
auto_drain = bool(getattr(getattr(config, "merge", None), "auto_drain", False))
|
|
4061
4076
|
|
|
4062
4077
|
# ── Group by (repo_github, target_branch) ──────────────────────────────
|
|
4063
4078
|
group_order: list[tuple[str, str]] = []
|
|
@@ -4133,6 +4148,7 @@ def plan(
|
|
|
4133
4148
|
enqueued_at=entry.enqueued_at,
|
|
4134
4149
|
last_attempt=entry.last_attempt,
|
|
4135
4150
|
milestone=milestones.get((entry.repo_name, entry.issue_number)),
|
|
4151
|
+
auto_drain=auto_drain,
|
|
4136
4152
|
))
|
|
4137
4153
|
|
|
4138
4154
|
return result
|
|
@@ -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
|
|
@@ -86,6 +86,35 @@ tests:
|
|
|
86
86
|
# zero-tab state. THIS IS THE GREEN CONTROL — see `expected_red` below.
|
|
87
87
|
board_tabs_close_2283::zero_tabs_render_no_close_or_overflow_glyphs: 2283
|
|
88
88
|
|
|
89
|
+
# ── #2284 (W-3) — Pipeline's own independent tab set (contract §3) ────────
|
|
90
|
+
# Slice: pipeline_tabs_2284.rs · mocks: pipeline-tabs-independent.screen
|
|
91
|
+
# (plus board-pinned-3-tabs.screen — §3b calls the two "the independence
|
|
92
|
+
# pair")
|
|
93
|
+
#
|
|
94
|
+
# §3a — zero Pipeline tabs render no strip on Pipeline. THIS IS THE GREEN
|
|
95
|
+
# CONTROL — see the `expected_red` block below.
|
|
96
|
+
pipeline_tabs_2284::pipeline_with_zero_doc_tabs_renders_no_tab_strip: 2284
|
|
97
|
+
# §3a — Pipeline has no toolbar, so its strip is the FIRST main-panel content
|
|
98
|
+
# row, immediately above the Overview/Issue/Log/Summary/Terminal sub-tab bar
|
|
99
|
+
# (with §3a's own stated contrast: on Board the toolbar precedes the strip)
|
|
100
|
+
pipeline_tabs_2284::pipeline_doc_tab_strip_is_the_first_main_panel_row_with_no_toolbar_above_it: 2284
|
|
101
|
+
# §3b bullet 1 — switching to Pipeline shows Pipeline's (empty) set, not the
|
|
102
|
+
# Board's three tabs, and does not lose them. THIS IS A GREEN RATCHET — see
|
|
103
|
+
# the `expected_red` block below.
|
|
104
|
+
pipeline_tabs_2284::switching_to_pipeline_hides_the_boards_tabs_without_losing_them: 2284
|
|
105
|
+
# §3b + #2284 AC 1 — two Pipeline tabs with three already open on the Board
|
|
106
|
+
# shows EXACTLY two on Pipeline, and no Board document leaks into the strip
|
|
107
|
+
pipeline_tabs_2284::pipeline_opens_its_own_two_tabs_while_the_board_keeps_three: 2284
|
|
108
|
+
# §3b bullet 2 + AC 2 — the milestone's headline round trip: Board →
|
|
109
|
+
# Pipeline → Board restores the same three tabs, same order, same active tab
|
|
110
|
+
pipeline_tabs_2284::board_pipeline_board_round_trip_restores_the_boards_tabs_order_and_active_tab: 2284
|
|
111
|
+
# §3b + AC 3 — each scope owns its own preview slot: a single click in
|
|
112
|
+
# Pipeline leaves the Board's `∘ ` preview tab exactly where it was
|
|
113
|
+
pipeline_tabs_2284::each_scope_owns_its_own_preview_slot: 2284
|
|
114
|
+
# §3b + AC 4 — reveal-on-activate is per scope: activating a Pipeline tab
|
|
115
|
+
# selects its row in the PIPELINE sidebar and leaves the Board's selection
|
|
116
|
+
pipeline_tabs_2284::activating_a_pipeline_tab_reveals_its_row_in_the_pipeline_sidebar_not_the_boards: 2284
|
|
117
|
+
|
|
89
118
|
# ── expected_red (#2164) ───────────────────────────────────────────────────
|
|
90
119
|
# Hand-derived from a REAL run of the sealed suite against origin/main at the
|
|
91
120
|
# time of authoring (`cd tui && cargo test --test acceptance --features
|
|
@@ -140,6 +169,34 @@ expected_red:
|
|
|
140
169
|
- board_tabs_close_2283::activating_a_scrolled_out_tab_scrolls_it_back_into_view_and_renders_the_right_affordance
|
|
141
170
|
- board_tabs_close_2283::closing_the_last_tab_restores_the_zero_tab_baseline
|
|
142
171
|
|
|
172
|
+
# #2284 — OBSERVED, not intended. Taken from three consecutive real runs of
|
|
173
|
+
# the sealed suite (`cd tui && RUSTC_BOOTSTRAP=1 cargo test --test acceptance
|
|
174
|
+
# --features test-support -- -Z unstable-options --format json`, the driver
|
|
175
|
+
# command in coordinator.yml) at authoring time: of this slice's 7 ids, the
|
|
176
|
+
# same 5 FAILED and the same 2 passed on every run. The 2 that passed are
|
|
177
|
+
# deliberately ABSENT below:
|
|
178
|
+
#
|
|
179
|
+
# * `pipeline_with_zero_doc_tabs_renders_no_tab_strip` — the CONTROL.
|
|
180
|
+
# Green today (no panel paints a strip with nothing open) and must stay
|
|
181
|
+
# green after #2284 lands: an implementation that reserves the Pipeline
|
|
182
|
+
# strip row unconditionally, or that renders the Board's tabs on
|
|
183
|
+
# Pipeline, breaks exactly this test. Listing it would make its
|
|
184
|
+
# inevitable pass a HARD FAILURE.
|
|
185
|
+
# * `switching_to_pipeline_hides_the_boards_tabs_without_losing_them` — a
|
|
186
|
+
# RATCHET. Green today for the degenerate reason that the single global
|
|
187
|
+
# set #2282 shipped renders only on the Board, so nothing leaks onto
|
|
188
|
+
# Pipeline and nothing is lost coming back. Both halves become real
|
|
189
|
+
# constraints the moment the set is keyed by scope: a per-scope map that
|
|
190
|
+
# rebuilds (rather than preserves) the outgoing scope's entry fails the
|
|
191
|
+
# return leg, and a strip that paints the focused scope's tabs on the
|
|
192
|
+
# wrong panel fails the outbound one.
|
|
193
|
+
2284:
|
|
194
|
+
- pipeline_tabs_2284::pipeline_doc_tab_strip_is_the_first_main_panel_row_with_no_toolbar_above_it
|
|
195
|
+
- pipeline_tabs_2284::pipeline_opens_its_own_two_tabs_while_the_board_keeps_three
|
|
196
|
+
- pipeline_tabs_2284::board_pipeline_board_round_trip_restores_the_boards_tabs_order_and_active_tab
|
|
197
|
+
- pipeline_tabs_2284::each_scope_owns_its_own_preview_slot
|
|
198
|
+
- pipeline_tabs_2284::activating_a_pipeline_tab_reveals_its_row_in_the_pipeline_sidebar_not_the_boards
|
|
199
|
+
|
|
143
200
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
144
201
|
# FOR THE COORDINATOR — three findings from authoring this slice. None of them
|
|
145
202
|
# is a worker's to fix, and none was resolved by editing the contract (a
|
|
@@ -255,3 +312,73 @@ expected_red:
|
|
|
255
312
|
# (quadraui#593) have also landed (`style_at`/`styled_row`), but §1's ruling
|
|
256
313
|
# stands: the `∘ ` marker remains the pinned preview signal, and this slice
|
|
257
314
|
# asserts no styles.
|
|
315
|
+
|
|
316
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
317
|
+
# FOR THE COORDINATOR — findings from authoring the #2284 slice (contract §3).
|
|
318
|
+
# Independent of the #2282 / #2283 notes above; again, none is a worker's to
|
|
319
|
+
# fix by editing this suite, and none was resolved by editing the contract.
|
|
320
|
+
# ═══════════════════════════════════════════════════════════════════════════
|
|
321
|
+
#
|
|
322
|
+
# 7. LIVE HARNESS BLOCKER (flaky, machine-dependent, and it will bite #2284's
|
|
323
|
+
# worker on the very first run): **entering the Pipeline panel destroys the
|
|
324
|
+
# seeded fixture in the sealed suite.** Switching panels runs
|
|
325
|
+
# `sync_active_view_from_shell` -> `maybe_kick_pipeline_loader` ->
|
|
326
|
+
# `refresh()` -> `start_data_load()` (`tui/src/app/data.rs:2620`). That
|
|
327
|
+
# function short-circuits to `BoardData::default()` — so
|
|
328
|
+
# `apply_pending_data`'s #620 degraded-tick guard keeps the seeded board —
|
|
329
|
+
# but the short-circuit is gated `#[cfg(test)]` ONLY. `tui/tests/acceptance.rs`
|
|
330
|
+
# is a separate integration-test crate, so the `coord_tui` it links is built
|
|
331
|
+
# WITHOUT `cfg(test)`; the loader therefore reads the real local
|
|
332
|
+
# `~/.coord/coord.db`, and the next dispatched event (`dispatch_handle`
|
|
333
|
+
# drains the receiver before handling anything) wholesale-replaces
|
|
334
|
+
# `self.data`. Measured on this machine: two clicks after landing on
|
|
335
|
+
# Pipeline, the Board sidebar renders the developer's real `api (1)` repo
|
|
336
|
+
# and the Pipeline tree is empty ("Loading tracked issues…").
|
|
337
|
+
#
|
|
338
|
+
# It is a RACE, not a certainty — the load runs on a spawned thread, so
|
|
339
|
+
# whether the fixture survives depends on whether that thread finished
|
|
340
|
+
# before the next event. Across three authoring runs, 3 of the 5 red ids
|
|
341
|
+
# died at the harness precondition and 2 got far enough to fail on the real
|
|
342
|
+
# §3a clause; which is which varied run to run. Every affected assertion
|
|
343
|
+
# says `HARNESS PRECONDITION (NOT a #2284 defect …)` in its panic message so
|
|
344
|
+
# the two failure modes are distinguishable from a JSON report alone.
|
|
345
|
+
#
|
|
346
|
+
# The fix is one line of app code, and this repo has already made it once
|
|
347
|
+
# for the same reason: `resolve_board_service()`
|
|
348
|
+
# (`tui/src/app/data.rs:1950`) is gated
|
|
349
|
+
# `#[cfg(any(test, feature = "test-support"))]` with a comment citing #1039
|
|
350
|
+
# and naming this exact external-crate `cfg(test)` trap.
|
|
351
|
+
# `start_data_load()`'s stub needs the same widening. It is NOT in #2284's
|
|
352
|
+
# "Files" list, so the coordinator should either land it as a prerequisite
|
|
353
|
+
# or explicitly authorise the worker to widen that cfg — without it the five
|
|
354
|
+
# red ids below cannot go green reliably no matter how correct the
|
|
355
|
+
# per-scope tab model is.
|
|
356
|
+
#
|
|
357
|
+
# 8. §3b's "same scroll position as before the switch" is not asserted. The
|
|
358
|
+
# round-trip test opens three tabs in an 82-column strip, where nothing is
|
|
359
|
+
# scrolled, and the contract pins no rendered signal for a *restored* strip
|
|
360
|
+
# scroll offset beyond §4's `‹`/`›` affordances — which are #2283's slice
|
|
361
|
+
# and whose own mock the #2283 author already flagged (finding 4) as
|
|
362
|
+
# contradicting §2b's label width. Inventing an observable for it would
|
|
363
|
+
# have meant inventing a width. Flagged as a `TODO(test-author)` in the
|
|
364
|
+
# slice.
|
|
365
|
+
#
|
|
366
|
+
# 9. §2f's scroll half is likewise not re-asserted for the Pipeline scope.
|
|
367
|
+
# #2284's own AC says "reveals its row in the Pipeline sidebar, not the
|
|
368
|
+
# Board's", and the contract pins the scroll requirement only for the Board
|
|
369
|
+
# (§2f, five issues on a short viewport). This slice asserts the per-scope
|
|
370
|
+
# SELECTION (`▸ #201` inside the Pipeline sidebar's columns 3–37, plus the
|
|
371
|
+
# Board's own `▸ #103` surviving a Pipeline-side activation) and leaves the
|
|
372
|
+
# scroll half to #2282's slice, which owns §2f. Also a `TODO(test-author)`.
|
|
373
|
+
#
|
|
374
|
+
# Also worth knowing, not a contract problem: the Pipeline sidebar nests
|
|
375
|
+
# tracked issues under state -> repo -> milestone nodes whose innermost node is
|
|
376
|
+
# COLLAPSED by default, and renders rows as `#201 Add retry backoffwork`
|
|
377
|
+
# (two spaces, title truncated to the 35-column sidebar, stage badge butted
|
|
378
|
+
# against it) — nothing like the mocks' `#201 Add retry backoff to fetch`. The
|
|
379
|
+
# slice therefore targets Pipeline rows by their `#<N>` tag restricted to the
|
|
380
|
+
# sidebar columns (§0), never by a full row string, and expands that group as a
|
|
381
|
+
# labelled precondition. The fixture also gives #101–#103 an untracked label
|
|
382
|
+
# and #201–#203 the tracked `coord` one: the Board sidebar lists all six (it
|
|
383
|
+
# does not filter by label) while the Pipeline lists only the 200s, which is
|
|
384
|
+
# what makes the mocks' 100s/200s ranges disjoint in a single seeded board.
|