code-coordinator 0.5.171__tar.gz → 0.5.173__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.171 → code_coordinator-0.5.173}/PKG-INFO +1 -1
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/client.py +30 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/server.py +263 -1
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/drive.py +120 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/drive_queue.py +28 -6
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/OPERATING_GOTCHAS.md +17 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dashboard.py +234 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dashboard_fixture.py +114 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_drive.py +72 -1
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_drive_queue.py +42 -2
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/workflows/acceptance-web.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/.gitignore +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/CLAUDE.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/GOAL.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/LICENSE +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/MANIFEST.in +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/README.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/__init__.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/agent.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/audit.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/block_log.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/board_service.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/brain.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/claim.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/cli.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/comments.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/config.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dao.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/db.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/deps.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/events.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/filelock.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/freshness.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/gates.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/goal.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/context.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/models.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/render.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/health/units.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/hooks.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/interactive.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/models.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/network.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/notify.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/openapi.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/parentage.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/plans.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/progress.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/release_window.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/reports.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/review.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/self_health.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/coord-dispatch-verbs/SKILL.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/drive-queue-preflight/SKILL.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/fleet-restart-safety/SKILL.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/merge-stuck-triage/SKILL.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/pipeline-limbo-triage/SKILL.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/review-verdict-recovery/SKILL.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/tui-quadraui-workflow/SKILL.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/smoke.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/split_work.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/state.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/test_author.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/test_report.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/usage.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/install-agent.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/pyproject.toml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/setup.cfg +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/__init__.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/detail_substate_2285.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-65/tabs_discoverability_2287.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/conftest.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_skills_self_heal.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_diagnose_self.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_config.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_db.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_events.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_init.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_models.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_network.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_self_health.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_session.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_split.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_state.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.171 → code_coordinator-0.5.173}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -510,6 +510,36 @@ def fetch_drive_queue_entry(
|
|
|
510
510
|
return None
|
|
511
511
|
|
|
512
512
|
|
|
513
|
+
def post_drive_queue(
|
|
514
|
+
svc: ServiceConfig,
|
|
515
|
+
action: str,
|
|
516
|
+
*,
|
|
517
|
+
timeout: float = _WRITE_TIMEOUT,
|
|
518
|
+
**fields,
|
|
519
|
+
) -> dict:
|
|
520
|
+
"""POST /drive-queue {action, ...fields} — the write side of
|
|
521
|
+
:func:`fetch_drive_queue` (#2429 DQW-2).
|
|
522
|
+
|
|
523
|
+
*fields* are forwarded verbatim as sibling keys next to ``action``,
|
|
524
|
+
e.g. ``post_drive_queue(svc, "move", repo_name="api", issue_number=1,
|
|
525
|
+
to_position=0)`` or ``post_drive_queue(svc, "update", repo_name="api",
|
|
526
|
+
issue_number=1, fields={"hold_state": "released"})`` — same body shape
|
|
527
|
+
``coord/serve_app.py``'s ``post_drive_queue`` route (``action`` in
|
|
528
|
+
``{enqueue, dequeue, update, move}``) already accepts, so a caller just
|
|
529
|
+
passes through whatever ``coord/dashboard/server.py``'s
|
|
530
|
+
``/api/drive-queue/action`` handler decided to send. Returns the
|
|
531
|
+
decoded per-action response (``{"moved": bool}`` / ``{"deleted": bool}``
|
|
532
|
+
/ ``{"updated": bool}`` / ``{"entry_id": int}``).
|
|
533
|
+
|
|
534
|
+
Unlike :func:`fetch_drive_queue` this is NOT fail-soft: it raises
|
|
535
|
+
``httpx.HTTPError`` on transport/HTTP failure, the same posture as
|
|
536
|
+
:func:`post_cordon`/:func:`post_pause`/:func:`post_quiet_hours` — a
|
|
537
|
+
move/remove/unblock/resume that silently failed to reach the daemon
|
|
538
|
+
would leave the operator believing the queue changed when it didn't.
|
|
539
|
+
"""
|
|
540
|
+
return post_record(svc, "/drive-queue", {"action": action, **fields}, timeout=timeout)
|
|
541
|
+
|
|
542
|
+
|
|
513
543
|
def fetch_gate_a_approval(
|
|
514
544
|
svc: ServiceConfig,
|
|
515
545
|
repo_name: str,
|
|
@@ -37,7 +37,13 @@ from coord.events import (
|
|
|
37
37
|
from coord.board_service import read_board, write_board
|
|
38
38
|
from coord.dao import _JSON_COLUMNS
|
|
39
39
|
from coord.db import _ensure_schema
|
|
40
|
-
from coord.drive_queue import
|
|
40
|
+
from coord.drive_queue import (
|
|
41
|
+
HOLD_FIRED,
|
|
42
|
+
STATE_BLOCKED,
|
|
43
|
+
DriveQueueSummary,
|
|
44
|
+
entries_from_rows,
|
|
45
|
+
summarize_drive_queue,
|
|
46
|
+
)
|
|
41
47
|
from coord.models import Assignment
|
|
42
48
|
from coord.network import check_all, fetch_status
|
|
43
49
|
from coord.openapi import (
|
|
@@ -441,6 +447,51 @@ def openapi_spec() -> dict:
|
|
|
441
447
|
},
|
|
442
448
|
}
|
|
443
449
|
},
|
|
450
|
+
"/api/drive-queue/action": {
|
|
451
|
+
"post": {
|
|
452
|
+
"summary": (
|
|
453
|
+
"move/remove/unblock/resume a `coord drive` queue row "
|
|
454
|
+
"(#2429 DQW-2)"
|
|
455
|
+
),
|
|
456
|
+
"requestBody": {
|
|
457
|
+
"required": True,
|
|
458
|
+
"content": {
|
|
459
|
+
"application/json": {
|
|
460
|
+
"schema": {
|
|
461
|
+
"type": "object",
|
|
462
|
+
"properties": {
|
|
463
|
+
"repo_name": {"type": "string"},
|
|
464
|
+
"issue_number": {"type": "integer"},
|
|
465
|
+
"action": {
|
|
466
|
+
"type": "string",
|
|
467
|
+
"enum": ["move", "remove", "unblock", "resume"],
|
|
468
|
+
},
|
|
469
|
+
"to_position": {
|
|
470
|
+
"type": "integer",
|
|
471
|
+
"description": "Required when action == 'move'.",
|
|
472
|
+
},
|
|
473
|
+
},
|
|
474
|
+
"required": ["repo_name", "issue_number", "action"],
|
|
475
|
+
}
|
|
476
|
+
}
|
|
477
|
+
},
|
|
478
|
+
},
|
|
479
|
+
"responses": {
|
|
480
|
+
"200": {
|
|
481
|
+
"description": "OK",
|
|
482
|
+
"content": {"application/json": {"schema": ok_response}},
|
|
483
|
+
},
|
|
484
|
+
"400": {
|
|
485
|
+
"description": (
|
|
486
|
+
"Missing/unknown field, missing to_position for "
|
|
487
|
+
"'move', 'unblock' on a non-blocked row, or "
|
|
488
|
+
"'resume' on a row whose gate hasn't fired"
|
|
489
|
+
)
|
|
490
|
+
},
|
|
491
|
+
"404": {"description": "drive-queue entry not found"},
|
|
492
|
+
},
|
|
493
|
+
}
|
|
494
|
+
},
|
|
444
495
|
"/api/approve": {
|
|
445
496
|
"post": {
|
|
446
497
|
"summary": "Dispatch one or more proposals by id",
|
|
@@ -706,6 +757,72 @@ def build_app(
|
|
|
706
757
|
return _fixture.drive_queue()
|
|
707
758
|
return list_drive_queue()
|
|
708
759
|
|
|
760
|
+
def _drive_queue_write(action: str, **fields) -> dict:
|
|
761
|
+
"""POST /drive-queue's ``{action, ...fields}`` shape (#2429 DQW-2).
|
|
762
|
+
|
|
763
|
+
Live mode only — callers check ``_fixture is not None`` themselves
|
|
764
|
+
(mirrors ``_write_board``, whose fixture no-op lives at the call
|
|
765
|
+
site in ``api_pipeline_action``, not inside ``_write_board`` itself).
|
|
766
|
+
|
|
767
|
+
Resolves daemon-vs-local by hand, the same decision
|
|
768
|
+
``_read_board()``/``_write_board()`` make for the board, rather than
|
|
769
|
+
going through ``coord.state``'s own routed ``enqueue_drive_queue``/
|
|
770
|
+
``dequeue_drive_queue``/``update_drive_queue_entry``/
|
|
771
|
+
``move_drive_queue_entry`` wrappers — those already do this exact
|
|
772
|
+
dance internally, but routing here keeps the dashboard's thin-client
|
|
773
|
+
posture visible in this file instead of buried behind a
|
|
774
|
+
`coord.state` implementation detail.
|
|
775
|
+
|
|
776
|
+
Returns the daemon's per-action response dict verbatim
|
|
777
|
+
(``{"moved": bool}`` / ``{"deleted": bool}`` / ``{"updated": bool}``
|
|
778
|
+
/ ``{"entry_id": int}``), whether it came from the wire or from the
|
|
779
|
+
matching local ``_*_local`` function directly — the same functions
|
|
780
|
+
``coord/serve_app.py``'s own ``post_drive_queue`` route calls.
|
|
781
|
+
"""
|
|
782
|
+
from coord import board_service
|
|
783
|
+
|
|
784
|
+
svc = board_service.resolve()
|
|
785
|
+
if svc is not None:
|
|
786
|
+
from coord.client import post_drive_queue
|
|
787
|
+
|
|
788
|
+
return post_drive_queue(svc, action, **fields)
|
|
789
|
+
|
|
790
|
+
from coord.state import (
|
|
791
|
+
_dequeue_drive_queue_local,
|
|
792
|
+
_enqueue_drive_queue_local,
|
|
793
|
+
_move_drive_queue_entry_local,
|
|
794
|
+
_update_drive_queue_entry_local,
|
|
795
|
+
)
|
|
796
|
+
|
|
797
|
+
if action == "dequeue":
|
|
798
|
+
return {
|
|
799
|
+
"deleted": _dequeue_drive_queue_local(
|
|
800
|
+
fields["repo_name"], fields["issue_number"]
|
|
801
|
+
)
|
|
802
|
+
}
|
|
803
|
+
if action == "enqueue":
|
|
804
|
+
entry_id = _enqueue_drive_queue_local(
|
|
805
|
+
fields["repo_name"],
|
|
806
|
+
fields["issue_number"],
|
|
807
|
+
machine=fields.get("machine"),
|
|
808
|
+
after=fields.get("after") or [],
|
|
809
|
+
position=fields.get("position"),
|
|
810
|
+
)
|
|
811
|
+
return {"entry_id": entry_id}
|
|
812
|
+
if action == "update":
|
|
813
|
+
return {
|
|
814
|
+
"updated": _update_drive_queue_entry_local(
|
|
815
|
+
fields["repo_name"], fields["issue_number"], **fields["fields"]
|
|
816
|
+
)
|
|
817
|
+
}
|
|
818
|
+
if action == "move":
|
|
819
|
+
return {
|
|
820
|
+
"moved": _move_drive_queue_entry_local(
|
|
821
|
+
fields["repo_name"], fields["issue_number"], fields["to_position"]
|
|
822
|
+
)
|
|
823
|
+
}
|
|
824
|
+
raise ValueError(f"unknown drive-queue action: {action!r}")
|
|
825
|
+
|
|
709
826
|
# ── Real-time event bus ────────────────────────────────────────────────
|
|
710
827
|
event_source = EventSource()
|
|
711
828
|
|
|
@@ -1024,6 +1141,150 @@ def build_app(
|
|
|
1024
1141
|
entries = [r for r in rows if r.get("repo_name") == repo] if repo else rows
|
|
1025
1142
|
return JSONResponse({"entries": entries, "summary": asdict(summary)})
|
|
1026
1143
|
|
|
1144
|
+
async def api_drive_queue_action(request: Request) -> JSONResponse:
|
|
1145
|
+
"""POST /api/drive-queue/action — move/remove/unblock/resume a
|
|
1146
|
+
`coord drive` queue row (#2429 DQW-2).
|
|
1147
|
+
|
|
1148
|
+
Body: ``{"repo_name": "...", "issue_number": N, "action": "move" |
|
|
1149
|
+
"remove" | "unblock" | "resume", ...}``. Response:
|
|
1150
|
+
``{"ok": bool, "error"?: str}`` — the same envelope
|
|
1151
|
+
``api_pipeline_action`` uses, not a new one.
|
|
1152
|
+
|
|
1153
|
+
All four actions ride the daemon's already-implemented
|
|
1154
|
+
``POST /drive-queue`` ops (``coord/serve_app.py``'s
|
|
1155
|
+
``post_drive_queue``) via ``_drive_queue_write`` — no new
|
|
1156
|
+
queue-mutation logic here, just routing plus the two client-side
|
|
1157
|
+
guards the TUI already enforces (``tui/src/app/drive_queue.rs``'s
|
|
1158
|
+
``queue_unblock_selected``/``queue_resume_selected``):
|
|
1159
|
+
|
|
1160
|
+
* ``move`` -> ``{action: "move", to_position}`` -> daemon op ``move``.
|
|
1161
|
+
* ``remove`` -> daemon op ``dequeue``.
|
|
1162
|
+
* ``unblock`` -> dequeue then re-enqueue with the row's ``machine``
|
|
1163
|
+
preserved and ``after`` DROPPED — the exact recipe
|
|
1164
|
+
``dispatch_drive_queue_unblock`` (and its Python precedent,
|
|
1165
|
+
``coord/commands/drive_queue.py``'s ``_requeue_command``) uses: an
|
|
1166
|
+
unsatisfiable pre-req is one of the two things that blocks a row,
|
|
1167
|
+
so re-adding with the same ``after`` would just re-block it.
|
|
1168
|
+
Refused with 400 on anything but a ``state == "blocked"`` row.
|
|
1169
|
+
* ``resume`` -> daemon op ``update`` with
|
|
1170
|
+
``fields={hold_state: "released", hold_probes: 0}``. Refused with
|
|
1171
|
+
400 on a row whose gate hasn't fired (``hold_state != "fired"``).
|
|
1172
|
+
|
|
1173
|
+
In fixture mode (#1538) every one of these is **recorded, not
|
|
1174
|
+
executed** — mirrors ``api_pipeline_action``'s ``_fixture_action``.
|
|
1175
|
+
"""
|
|
1176
|
+
try:
|
|
1177
|
+
body = await request.json()
|
|
1178
|
+
except ValueError:
|
|
1179
|
+
return JSONResponse({"error": "invalid JSON"}, status_code=400)
|
|
1180
|
+
|
|
1181
|
+
repo_name = body.get("repo_name")
|
|
1182
|
+
issue_number = body.get("issue_number")
|
|
1183
|
+
action = body.get("action")
|
|
1184
|
+
if not repo_name or issue_number is None or not action:
|
|
1185
|
+
return JSONResponse(
|
|
1186
|
+
{"error": "repo_name, issue_number and action are required"},
|
|
1187
|
+
status_code=400,
|
|
1188
|
+
)
|
|
1189
|
+
try:
|
|
1190
|
+
issue_number = int(issue_number)
|
|
1191
|
+
except (TypeError, ValueError):
|
|
1192
|
+
return JSONResponse({"error": "issue_number must be an int"}, status_code=400)
|
|
1193
|
+
|
|
1194
|
+
if action not in ("move", "remove", "unblock", "resume"):
|
|
1195
|
+
return JSONResponse({"error": f"unknown action: {action!r}"}, status_code=400)
|
|
1196
|
+
|
|
1197
|
+
to_position = None
|
|
1198
|
+
if action == "move":
|
|
1199
|
+
try:
|
|
1200
|
+
to_position = int(body.get("to_position"))
|
|
1201
|
+
except (TypeError, ValueError):
|
|
1202
|
+
return JSONResponse(
|
|
1203
|
+
{"error": "to_position must be an int"}, status_code=400
|
|
1204
|
+
)
|
|
1205
|
+
|
|
1206
|
+
rows = _fixture.drive_queue() if _fixture is not None else _read_drive_queue()
|
|
1207
|
+
entry = next(
|
|
1208
|
+
(
|
|
1209
|
+
r for r in rows
|
|
1210
|
+
if r.get("repo_name") == repo_name
|
|
1211
|
+
and int(r.get("issue_number", -1)) == issue_number
|
|
1212
|
+
),
|
|
1213
|
+
None,
|
|
1214
|
+
)
|
|
1215
|
+
if entry is None:
|
|
1216
|
+
return JSONResponse({"error": "drive-queue entry not found"}, status_code=404)
|
|
1217
|
+
|
|
1218
|
+
if action == "unblock" and entry.get("state") != STATE_BLOCKED:
|
|
1219
|
+
return JSONResponse(
|
|
1220
|
+
{"ok": False, "error": "only a blocked entry can be unblocked"},
|
|
1221
|
+
status_code=400,
|
|
1222
|
+
)
|
|
1223
|
+
if action == "resume" and entry.get("hold_state") != HOLD_FIRED:
|
|
1224
|
+
return JSONResponse(
|
|
1225
|
+
{
|
|
1226
|
+
"ok": False,
|
|
1227
|
+
"error": "only an entry whose deploy gate has fired can be resumed",
|
|
1228
|
+
},
|
|
1229
|
+
status_code=400,
|
|
1230
|
+
)
|
|
1231
|
+
|
|
1232
|
+
if _fixture is not None:
|
|
1233
|
+
_fixture.record("/api/drive-queue/action", body, action=action)
|
|
1234
|
+
return JSONResponse({"ok": True})
|
|
1235
|
+
|
|
1236
|
+
try:
|
|
1237
|
+
if action == "move":
|
|
1238
|
+
result = _drive_queue_write(
|
|
1239
|
+
"move",
|
|
1240
|
+
repo_name=repo_name,
|
|
1241
|
+
issue_number=issue_number,
|
|
1242
|
+
to_position=to_position,
|
|
1243
|
+
)
|
|
1244
|
+
ok = bool(result.get("moved"))
|
|
1245
|
+
elif action == "remove":
|
|
1246
|
+
result = _drive_queue_write(
|
|
1247
|
+
"dequeue", repo_name=repo_name, issue_number=issue_number
|
|
1248
|
+
)
|
|
1249
|
+
ok = bool(result.get("deleted"))
|
|
1250
|
+
elif action == "unblock":
|
|
1251
|
+
dequeue_result = _drive_queue_write(
|
|
1252
|
+
"dequeue", repo_name=repo_name, issue_number=issue_number
|
|
1253
|
+
)
|
|
1254
|
+
if bool(dequeue_result.get("deleted")):
|
|
1255
|
+
enqueue_result = _drive_queue_write(
|
|
1256
|
+
"enqueue",
|
|
1257
|
+
repo_name=repo_name,
|
|
1258
|
+
issue_number=issue_number,
|
|
1259
|
+
machine=entry.get("machine"),
|
|
1260
|
+
after=[],
|
|
1261
|
+
)
|
|
1262
|
+
ok = enqueue_result.get("entry_id") is not None
|
|
1263
|
+
else:
|
|
1264
|
+
# The guard read above (``_read_drive_queue()``) is not
|
|
1265
|
+
# atomic with this write: the row can be removed/changed
|
|
1266
|
+
# by a concurrent dequeue/resume/daemon tick between the
|
|
1267
|
+
# two. If there was nothing to dequeue, there is nothing
|
|
1268
|
+
# to re-enqueue either — doing so anyway would silently
|
|
1269
|
+
# resurrect a row someone else legitimately removed.
|
|
1270
|
+
ok = False
|
|
1271
|
+
else: # resume
|
|
1272
|
+
result = _drive_queue_write(
|
|
1273
|
+
"update",
|
|
1274
|
+
repo_name=repo_name,
|
|
1275
|
+
issue_number=issue_number,
|
|
1276
|
+
fields={"hold_state": "released", "hold_probes": 0},
|
|
1277
|
+
)
|
|
1278
|
+
ok = bool(result.get("updated"))
|
|
1279
|
+
except Exception as exc: # noqa: BLE001
|
|
1280
|
+
return JSONResponse({"ok": False, "error": str(exc)}, status_code=500)
|
|
1281
|
+
|
|
1282
|
+
if not ok:
|
|
1283
|
+
return JSONResponse(
|
|
1284
|
+
{"ok": False, "error": "drive-queue entry not found"}, status_code=404
|
|
1285
|
+
)
|
|
1286
|
+
return JSONResponse({"ok": True})
|
|
1287
|
+
|
|
1027
1288
|
async def api_approve(request: Request) -> JSONResponse:
|
|
1028
1289
|
from coord.dispatch import dispatch, post_briefing, compute_do_not_touch
|
|
1029
1290
|
from coord.state import (
|
|
@@ -1944,6 +2205,7 @@ def build_app(
|
|
|
1944
2205
|
Route("/api/sessions", api_sessions, methods=["GET"]),
|
|
1945
2206
|
Route("/api/proposals", api_proposals, methods=["GET"]),
|
|
1946
2207
|
Route("/api/drive-queue", api_drive_queue, methods=["GET"]),
|
|
2208
|
+
Route("/api/drive-queue/action", api_drive_queue_action, methods=["POST"]),
|
|
1947
2209
|
Route("/api/approve", api_approve, methods=["POST"]),
|
|
1948
2210
|
Route("/api/reject", api_reject, methods=["POST"]),
|
|
1949
2211
|
Route("/api/diff/{id}", api_diff, methods=["GET"]),
|
|
@@ -114,6 +114,7 @@ from coord.failure_class import (
|
|
|
114
114
|
plan_usage_limit_resume,
|
|
115
115
|
)
|
|
116
116
|
from coord.models import DELIVERABLE_ANALYSIS_LABEL, POLICY_REFUSAL_MARKER
|
|
117
|
+
from coord.self_health import self_freshness
|
|
117
118
|
from coord.usage_limits import PlanLimits, evaluate_usage_gate, get_plan_limits
|
|
118
119
|
# Lost in the #1584-onto-#1590 rebase: _decide_review() calls this, but the
|
|
119
120
|
# import lived in a hunk #1590 rewrote, so the merge came out textually clean
|
|
@@ -181,6 +182,20 @@ EXIT_DISPATCH_REFUSED = 5
|
|
|
181
182
|
# vimcode#635 for the two live incidents (140 minutes and ~25 minutes of a
|
|
182
183
|
# held queue slot, respectively, producing nothing).
|
|
183
184
|
EXIT_DEAD_END = 6
|
|
185
|
+
# #2443: a deliberate SELF-HEAL exit, not a failure — the drive loop noticed
|
|
186
|
+
# it was stuck repeating the identical WAIT reason (see `_SELF_HEAL_WAIT_
|
|
187
|
+
# STREAK`) while its OWN on-disk `coord` install had moved since this
|
|
188
|
+
# session started. Python never reloads an already-imported module, so a
|
|
189
|
+
# fix landing mid-run is otherwise invisible to a live session for as long
|
|
190
|
+
# as `--deadline` allows — the claude-coordinator#2286 incident this closes
|
|
191
|
+
# polled one unfetchable path every ~60s for 2+ hours after the fix was
|
|
192
|
+
# already on disk. Distinct from EXIT_DISPATCH_REFUSED/EXIT_DEAD_END on
|
|
193
|
+
# purpose: this condition is NOT permanent — relaunching is exactly the fix
|
|
194
|
+
# — so it must fall through `coord.drive_queue._reconcile_running`'s
|
|
195
|
+
# ordinary `retry` branch rather than either of those two `blocked`
|
|
196
|
+
# branches, which is why nothing in drive_queue.py needs to special-case
|
|
197
|
+
# this code at all.
|
|
198
|
+
EXIT_SELF_STALE = 7
|
|
184
199
|
|
|
185
200
|
|
|
186
201
|
class DriveError(Exception):
|
|
@@ -218,6 +233,31 @@ _CAPTURED_OUTPUT_LIMIT = 4000
|
|
|
218
233
|
# never *tightened* for the environmental case.
|
|
219
234
|
_ENVIRONMENTAL_WORK_RETRY_BUDGET = 5
|
|
220
235
|
|
|
236
|
+
# #2443: how many CONSECUTIVE polls of the IDENTICAL `Action.label` to
|
|
237
|
+
# tolerate before `Driver._loop` checks whether its own on-disk `coord`
|
|
238
|
+
# install has moved since this session started. Below this, a same-label
|
|
239
|
+
# repeat is indistinguishable from an ordinary slow-but-progressing wait (a
|
|
240
|
+
# 10-20 minute test, a slow CI check) and checking would just be wasted
|
|
241
|
+
# subprocess calls; at/above it, the check itself is a single local `git
|
|
242
|
+
# rev-parse HEAD` (no network — see `coord.self_health.self_freshness
|
|
243
|
+
# (fetch=False)`), cheap enough to run on every remaining poll of the
|
|
244
|
+
# streak. At the default `--poll` of 60s this is ~10 minutes — fast enough
|
|
245
|
+
# to matter against a multi-hour `--deadline`, slow enough that a routine
|
|
246
|
+
# wait is never mistaken for the stuck case this exists to catch.
|
|
247
|
+
_SELF_HEAL_WAIT_STREAK = 10
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
def _current_self_head() -> str | None:
|
|
251
|
+
"""Real default for `Driver.self_head_probe` (#2443): THIS process's own
|
|
252
|
+
on-disk `coord` install's current HEAD, or ``None`` when it can't be
|
|
253
|
+
determined (not a git checkout, unreadable HEAD — see
|
|
254
|
+
:func:`coord.self_health.self_freshness`). ``fetch=False``: this only
|
|
255
|
+
needs to notice code that has ALREADY landed locally (e.g. a prior `git
|
|
256
|
+
pull`), never reaches the network, and therefore never blocks the poll
|
|
257
|
+
loop on a slow/unreachable origin.
|
|
258
|
+
"""
|
|
259
|
+
return self_freshness(fetch=False).head_sha
|
|
260
|
+
|
|
221
261
|
|
|
222
262
|
def _bounded_tail(text: str, limit: int = _CAPTURED_OUTPUT_LIMIT) -> str:
|
|
223
263
|
"""*text*, or its last *limit* characters if longer — the tail, because
|
|
@@ -3685,8 +3725,19 @@ class Driver:
|
|
|
3685
3725
|
# real `claude -p "/usage"` subprocess — mirrors *verifier*/*oracle_gate*
|
|
3686
3726
|
# above. Defaults to the real (cached, ~60s) probe.
|
|
3687
3727
|
usage_prober: Callable[[], PlanLimits] = get_plan_limits
|
|
3728
|
+
# #2443: injected so tests can script a fake on-disk HEAD sequence
|
|
3729
|
+
# without a real git checkout — same shape as *usage_prober* above.
|
|
3730
|
+
# Defaults to the real, local-only (`fetch=False`) probe.
|
|
3731
|
+
self_head_probe: Callable[[], str | None] = _current_self_head
|
|
3688
3732
|
|
|
3689
3733
|
_run_log: Path | None = field(default=None, init=False, repr=False)
|
|
3734
|
+
# #2443: this session's own on-disk `coord` HEAD, captured once by
|
|
3735
|
+
# `_loop()` right as the poll loop begins — the baseline every later
|
|
3736
|
+
# `_self_heal_drift_message` check compares against. `None` when it
|
|
3737
|
+
# could not be determined (not a git checkout, unreadable HEAD), which
|
|
3738
|
+
# keeps the self-heal check permanently a no-op for this run rather than
|
|
3739
|
+
# ever comparing against a placeholder.
|
|
3740
|
+
_start_head_sha: str | None = field(default=None, init=False, repr=False)
|
|
3690
3741
|
# #1499: the terminating Action's own message, captured by `_loop()` right
|
|
3691
3742
|
# before it returns — `run()` folds this into the `drive_exited` audit
|
|
3692
3743
|
# summary/details so a non-exceptional terminal exit (e.g. `decide()`
|
|
@@ -3818,6 +3869,36 @@ class Driver:
|
|
|
3818
3869
|
finally:
|
|
3819
3870
|
lock.release()
|
|
3820
3871
|
|
|
3872
|
+
# ── self-heal (#2443) ──────────────────────────────────────────────
|
|
3873
|
+
def _self_heal_drift_message(self, label: str, streak: int) -> str | None:
|
|
3874
|
+
"""Has THIS process's own on-disk ``coord`` install moved since this
|
|
3875
|
+
drive session started? ``None`` when it hasn't — or when freshness
|
|
3876
|
+
can't be determined at all, which must never be misread as drift —
|
|
3877
|
+
the overwhelmingly common case, so the caller just keeps waiting
|
|
3878
|
+
exactly as before.
|
|
3879
|
+
|
|
3880
|
+
Only ever consulted once *label* (a WAIT ``Action``'s own reason)
|
|
3881
|
+
has repeated *streak* times in a row (``_loop``'s
|
|
3882
|
+
``_SELF_HEAL_WAIT_STREAK`` gate) — this is specifically the #2286
|
|
3883
|
+
shape: ``_decide_acceptance_author``'s "could not verify commits
|
|
3884
|
+
(git fetch failed), retrying" arm returned the IDENTICAL label every
|
|
3885
|
+
~60s for 2+ hours after the fix that would have resolved it had
|
|
3886
|
+
already landed on disk, because Python never reloads an
|
|
3887
|
+
already-imported module. A stale in-memory `coord/drive.py` has no
|
|
3888
|
+
way to notice that on its own — this is the bounded check that lets
|
|
3889
|
+
it notice anyway.
|
|
3890
|
+
"""
|
|
3891
|
+
current = self.self_head_probe()
|
|
3892
|
+
if not current or not self._start_head_sha or current == self._start_head_sha:
|
|
3893
|
+
return None
|
|
3894
|
+
return (
|
|
3895
|
+
"code changed underneath this session — on-disk coord moved "
|
|
3896
|
+
f"from {self._start_head_sha[:8]} to {current[:8]} while stuck "
|
|
3897
|
+
f"repeating the same wait {streak}x: {label!r}. Exiting "
|
|
3898
|
+
"(EXIT_SELF_STALE) so coord drive-queue relaunches with "
|
|
3899
|
+
f"current code instead of continuing to wait on stale logic (#2443)."
|
|
3900
|
+
)
|
|
3901
|
+
|
|
3821
3902
|
def _post_escalation_comment(self, state: IssueState, message: str) -> None:
|
|
3822
3903
|
"""#1526: durably surface an escalation's reason onto the issue
|
|
3823
3904
|
itself, not just this run's tmux pane and the ``coord escalate``
|
|
@@ -4061,6 +4142,15 @@ class Driver:
|
|
|
4061
4142
|
# nudge) while guaranteeing a stalled stage is never more than one
|
|
4062
4143
|
# `stall_secs` window away from a fresh check.
|
|
4063
4144
|
last_nudge: float | None = None
|
|
4145
|
+
# #2443: this session's own on-disk `coord` HEAD, captured once,
|
|
4146
|
+
# right as the poll loop begins — see `_self_heal_drift_message`.
|
|
4147
|
+
self._start_head_sha = self.self_head_probe()
|
|
4148
|
+
# A distinct object (never equal to any real `Action.label`, empty
|
|
4149
|
+
# string included) so the very first WAIT of the run always starts
|
|
4150
|
+
# its streak at 1 rather than accidentally matching an unset
|
|
4151
|
+
# sentinel.
|
|
4152
|
+
last_wait_label: object = object()
|
|
4153
|
+
same_wait_streak = 0
|
|
4064
4154
|
|
|
4065
4155
|
while True:
|
|
4066
4156
|
now = self.clock()
|
|
@@ -4155,6 +4245,36 @@ class Driver:
|
|
|
4155
4245
|
for warning in action.warnings:
|
|
4156
4246
|
self.warn(warning)
|
|
4157
4247
|
|
|
4248
|
+
# #2443: self-heal — see `_self_heal_drift_message`. Tracked off
|
|
4249
|
+
# the Action's own `label`, NOT `fingerprint` above: a WAIT can
|
|
4250
|
+
# (and, in the #2286 shape, does) repeat the identical reason
|
|
4251
|
+
# poll after poll while the board fingerprint itself is static
|
|
4252
|
+
# for the same underlying reason, so this is really the same
|
|
4253
|
+
# signal — but keying directly on what the loop is ABOUT TO DO
|
|
4254
|
+
# keeps this correct even for a WAIT arm whose label happens to
|
|
4255
|
+
# be static text unrelated to fingerprint (e.g. "TEST: in
|
|
4256
|
+
# progress on a capability-matched machine") without needing to
|
|
4257
|
+
# reason about the two staying in lockstep. A non-WAIT action
|
|
4258
|
+
# (RUN or EXIT) always resets the streak: dispatching something
|
|
4259
|
+
# is progress by definition.
|
|
4260
|
+
if action.kind == WAIT:
|
|
4261
|
+
if action.label == last_wait_label:
|
|
4262
|
+
same_wait_streak += 1
|
|
4263
|
+
else:
|
|
4264
|
+
last_wait_label = action.label
|
|
4265
|
+
same_wait_streak = 1
|
|
4266
|
+
if same_wait_streak >= _SELF_HEAL_WAIT_STREAK:
|
|
4267
|
+
drift = self._self_heal_drift_message(
|
|
4268
|
+
action.label, same_wait_streak
|
|
4269
|
+
)
|
|
4270
|
+
if drift:
|
|
4271
|
+
self._last_exit_message = drift
|
|
4272
|
+
self.warn(drift)
|
|
4273
|
+
return EXIT_SELF_STALE
|
|
4274
|
+
else:
|
|
4275
|
+
last_wait_label = object()
|
|
4276
|
+
same_wait_streak = 0
|
|
4277
|
+
|
|
4158
4278
|
if action.is_exit:
|
|
4159
4279
|
# #1499: capture the exit reason for the audit boundary before
|
|
4160
4280
|
# anything below can fail — the escalation write is explicitly
|
|
@@ -2558,12 +2558,34 @@ def _reconcile_running(
|
|
|
2558
2558
|
dispatch_only = _dispatch_produced_nothing(
|
|
2559
2559
|
entry, facts
|
|
2560
2560
|
) and not _is_merge_gate_block_reason(own_reason)
|
|
2561
|
-
|
|
2562
|
-
|
|
2563
|
-
|
|
2564
|
-
|
|
2565
|
-
|
|
2566
|
-
|
|
2561
|
+
if not dispatch_only:
|
|
2562
|
+
dispatch_note = ""
|
|
2563
|
+
elif own_reason:
|
|
2564
|
+
# A clean exit that still names no assignment — `own_reason` is
|
|
2565
|
+
# present and already ruled out as a merge-gate block above, so the
|
|
2566
|
+
# confident diagnosis is warranted: the drive itself narrated a
|
|
2567
|
+
# death, and that death happened before `coord assign` ever ran.
|
|
2568
|
+
dispatch_note = (
|
|
2569
|
+
" — no assignment was ever created for this run (#2273): likely "
|
|
2570
|
+
"an infrastructure/dispatch-layer failure, not a code defect"
|
|
2571
|
+
)
|
|
2572
|
+
else:
|
|
2573
|
+
# #2442: a REAP, not a clean exit — the session was killed/crashed
|
|
2574
|
+
# and left no `own_reason` text at all, so there is nothing for
|
|
2575
|
+
# `_is_merge_gate_block_reason` to match against. That is not
|
|
2576
|
+
# evidence the cause WAS a dispatch failure; it just means this
|
|
2577
|
+
# branch has no way to rule one in or out. #2286 is the live
|
|
2578
|
+
# escalation this produced: a session parked 2.3h inside a
|
|
2579
|
+
# legitimate, already-diagnosed JIT-slice wait loop (#2426/#2437)
|
|
2580
|
+
# looked, to `_dispatch_produced_nothing` alone, identical to one
|
|
2581
|
+
# that never got dispatched — and got the same confident-but-wrong
|
|
2582
|
+
# "infrastructure/dispatch-layer failure" wording #2424 already
|
|
2583
|
+
# established was unreliable for the merge-gate case. Name the
|
|
2584
|
+
# effect (no assignment) without asserting the unknowable cause.
|
|
2585
|
+
dispatch_note = (
|
|
2586
|
+
" — no assignment was ever created for this run (#2273), and "
|
|
2587
|
+
"the session left no exit reason to diagnose why"
|
|
2588
|
+
)
|
|
2567
2589
|
|
|
2568
2590
|
# #2363: the "claimed success, wrote nothing" signature gets a WIDER
|
|
2569
2591
|
# ceiling than every other death reason — see `EMPTY_BRANCH_MAX_ATTEMPTS`
|
|
@@ -44,6 +44,23 @@ doc's guess) and reports STALE with a commit count when it hasn't been pulled
|
|
|
44
44
|
since a `coord/**` fix merged — the checkable gate for this row, the same way
|
|
45
45
|
`coord diagnose --graph` is the checkable gate for graphify freshness.
|
|
46
46
|
|
|
47
|
+
**#2443: a LIVE `coord drive` session now self-heals mid-run too.** #2436
|
|
48
|
+
above only helps *before* a new launch — it says nothing about a session
|
|
49
|
+
that was already running, with the OLD code loaded into memory, when the fix
|
|
50
|
+
landed. Python never reloads an already-imported module, so a stale live
|
|
51
|
+
session has no way to notice a fix on its own. `coord/drive.py`'s poll loop
|
|
52
|
+
now watches its own `WAIT` actions: once the identical wait reason repeats
|
|
53
|
+
`_SELF_HEAL_WAIT_STREAK` (10) polls in a row, it compares its own on-disk
|
|
54
|
+
`coord` HEAD (captured once, at session start) against the current one
|
|
55
|
+
(`coord.self_health.self_freshness(fetch=False)` — a local `git rev-parse
|
|
56
|
+
HEAD`, no network). If the checkout moved underneath it, the session exits
|
|
57
|
+
`EXIT_SELF_STALE` — a clean, non-permanent exit `coord drive-queue`'s
|
|
58
|
+
ordinary retry/relaunch path picks straight back up under the current code —
|
|
59
|
+
instead of continuing to poll dead logic for the rest of `--deadline`. This
|
|
60
|
+
is the actual fix for the incident #2436 diagnosed after the fact: a live
|
|
61
|
+
session on dellserver polled one unfetchable path every ~60s for 2+ hours
|
|
62
|
+
after the #2319/#2320 fix that would have resolved it was already on disk.
|
|
63
|
+
|
|
47
64
|
Not academic. #1394 (worker strands uncommitted work, then cleanup destroys it)
|
|
48
65
|
sat merged-but-undeployed, and the very next dispatch — #1402 — hit the
|
|
49
66
|
identical bug: **$3.44 and 10 minutes lost to something already fixed on
|