code-coordinator 0.5.53__tar.gz → 0.5.55__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.53 → code_coordinator-0.5.55}/.github/workflows/test.yml +49 -0
- {code_coordinator-0.5.53/code_coordinator.egg-info → code_coordinator-0.5.55}/PKG-INFO +1 -1
- {code_coordinator-0.5.53 → code_coordinator-0.5.55/code_coordinator.egg-info}/PKG-INFO +1 -1
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/SOURCES.txt +3 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/scm_file_list.json +3 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/test_gate.py +33 -1
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notify.py +90 -11
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/progress.py +117 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/revalidate.py +103 -2
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/smoke.py +23 -4
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/OPERATING_GOTCHAS.md +85 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/coord-test-runner.sh +232 -2
- code_coordinator-0.5.55/scripts/run_tests_in_populated_home.sh +150 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_acceptance_drivers.py +34 -2
- code_coordinator-0.5.55/tests/test_ambient_home_isolation.py +392 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_coord_test.py +77 -0
- code_coordinator-0.5.55/tests/test_coord_test_runner_baseline.py +364 -0
- code_coordinator-0.5.55/tests/test_cross_platform_imports.py +267 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_coord_db_backup.py +42 -1
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notify.py +112 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_progress.py +73 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_revalidate.py +200 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_smoke.py +20 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/data.rs +67 -4
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/dialogs.rs +262 -3
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/events.rs +31 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/fixtures.rs +2 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/mod.rs +58 -1
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/pipeline.rs +7 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/sidebar.rs +23 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/tests.rs +476 -0
- code_coordinator-0.5.53/tests/test_cross_platform_imports.py +0 -136
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/.gitignore +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/CLAUDE.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/GOAL.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/LICENSE +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/MANIFEST.in +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/README.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/__init__.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/agent.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/audit.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/board_service.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/brain.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/claim.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/cli.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/client.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/comments.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/config.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dao.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/db.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/deps.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/drive.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/events.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/filelock.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/freshness.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/gates.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/goal.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/context.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/models.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/render.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/health/units.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/hooks.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/interactive.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/models.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/network.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/openapi.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/parentage.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/plans.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/release_window.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/reports.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/review.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/split_work.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/state.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/test_author.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/test_report.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/usage.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/install-agent.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/pyproject.toml +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/setup.cfg +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/__init__.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/conftest.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_config.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_db.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_events.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_init.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_models.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_network.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_session.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_split.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_state.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.53 → code_coordinator-0.5.55}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -115,6 +115,55 @@ jobs:
|
|
|
115
115
|
- run: pip install -e ".[dev]"
|
|
116
116
|
- run: scripts/run_tests_without_gh.sh python -m pytest tests/ -q
|
|
117
117
|
|
|
118
|
+
# #2170: run the full suite in the environment of a REAL FLEET MACHINE — a
|
|
119
|
+
# populated `~/.coord/` (thin-client shaped), no `sqlite3` on PATH, and a
|
|
120
|
+
# `$TMPDIR` under an ancestor pytest config.
|
|
121
|
+
#
|
|
122
|
+
# This job exists because the `test` matrix above is structurally incapable
|
|
123
|
+
# of catching the class it covers. Six tests failed on `origin/main` on every
|
|
124
|
+
# fleet machine while `ubuntu-latest` stayed green on 3.12 AND 3.13 — the
|
|
125
|
+
# INVERSE of the familiar "passes locally, fails only in CI ⇒ ambient $HOME"
|
|
126
|
+
# pattern. They passed in CI *precisely because* CI's `$HOME` is empty, and a
|
|
127
|
+
# matrix whose only environment is the empty one can never see that.
|
|
128
|
+
#
|
|
129
|
+
# What it cost while invisible: the Test stage on `precision` could not
|
|
130
|
+
# produce a green verdict for this repo on ANY branch. Every dispatch there
|
|
131
|
+
# returned `SMOKE: fail`, the branch was blamed for breakage it did not
|
|
132
|
+
# cause, and a human read the log and adjudicated — 11m36s and $0.61 for zero
|
|
133
|
+
# signal about the branch, repeatedly, for months (claude-coordinator#2158).
|
|
134
|
+
#
|
|
135
|
+
# SAME SHAPE AS `no-gh-on-path` ABOVE, AND FOR THE SAME REASON. That job
|
|
136
|
+
# (#1484) exists because a host-dependent `gh` made the suite's result depend
|
|
137
|
+
# on the machine rather than the code; this one exists because a
|
|
138
|
+
# host-dependent `$HOME`/`$PATH`/`$TMPDIR` did the same thing in the opposite
|
|
139
|
+
# direction. Both mask by NAME rather than by dropping PATH directories — see
|
|
140
|
+
# `scripts/run_tests_in_populated_home.sh`'s header for why
|
|
141
|
+
# `PATH=/usr/bin:/bin` is the wrong recipe here.
|
|
142
|
+
#
|
|
143
|
+
# `tests/test_ambient_home_isolation.py` pins the specific affected targets
|
|
144
|
+
# on every run everywhere (including this job, and including a fleet
|
|
145
|
+
# machine's own Test leg) — that is the always-on gate, and it is what fails
|
|
146
|
+
# first if one of the three regresses. THIS job is the whole-suite sweep: it
|
|
147
|
+
# is what finds the NEXT test of this class before a fleet machine does.
|
|
148
|
+
# Verified at authoring time: 9590 passed, 13 skipped under these three knobs.
|
|
149
|
+
populated-home:
|
|
150
|
+
runs-on: ubuntu-latest
|
|
151
|
+
steps:
|
|
152
|
+
- uses: actions/checkout@v4
|
|
153
|
+
- uses: actions/setup-python@v5
|
|
154
|
+
with:
|
|
155
|
+
python-version: "3.12"
|
|
156
|
+
- run: pip install -e ".[dev]"
|
|
157
|
+
- run: scripts/run_tests_in_populated_home.sh python -m pytest tests/ -q
|
|
158
|
+
- name: What a red result here means
|
|
159
|
+
if: failure()
|
|
160
|
+
run: |
|
|
161
|
+
echo "::error::The suite is red under a POPULATED \$HOME (thin-client ~/.coord/, no sqlite3 on PATH, \$TMPDIR under an ancestor pytest config) while the plain 'test' job may well be green."
|
|
162
|
+
echo "That difference IS the finding, not noise: a test that needs an empty \$HOME cannot pass on any fleet machine, so the Test stage there can never go green and every dispatch costs a human adjudication (#2170)."
|
|
163
|
+
echo "Fix the TEST's isolation -- redirect \$HOME/XDG at tmp_path, drop COORD_SERVICE_URL/COORD_TOKEN/COORD_CONFIG, skip-guard an unprovisioned system binary, pin a nested pytest's --rootdir."
|
|
164
|
+
echo "Do NOT fix it by making the product trust an ambient path: 'coord config --config' is deliberately NOT authoritative on a thin client (CLAUDE.md, docs/EPHEMERAL_WORKERS.md)."
|
|
165
|
+
echo "Reproduce locally: scripts/run_tests_in_populated_home.sh python -m pytest tests/ -q"
|
|
166
|
+
|
|
118
167
|
# #906: run the test suite in thin-client mode with COORD_STRICT_LOCAL_BOARD=1
|
|
119
168
|
# so any board touch reachable from a thin-client path raises RuntimeError
|
|
120
169
|
# instead of silently no-oping against an empty local DB. This job catches
|
|
@@ -385,6 +385,7 @@ scripts/coord-test-runner.sh
|
|
|
385
385
|
scripts/drive-batch.sh
|
|
386
386
|
scripts/gen_board_fixture.py
|
|
387
387
|
scripts/next_release_tag.py
|
|
388
|
+
scripts/run_tests_in_populated_home.sh
|
|
388
389
|
scripts/run_tests_without_gh.sh
|
|
389
390
|
scripts/smoke_437_interactive.py
|
|
390
391
|
scripts/verify_878_review_capture.py
|
|
@@ -425,6 +426,7 @@ tests/test_agent_update.py
|
|
|
425
426
|
tests/test_agent_update_bluegreen.py
|
|
426
427
|
tests/test_agent_usage_limit.py
|
|
427
428
|
tests/test_agent_zero_commit.py
|
|
429
|
+
tests/test_ambient_home_isolation.py
|
|
428
430
|
tests/test_approve_reject_plan.py
|
|
429
431
|
tests/test_approve_usage_gate.py
|
|
430
432
|
tests/test_assignment_already_recorded_daemon.py
|
|
@@ -513,6 +515,7 @@ tests/test_config_usage_gate.py
|
|
|
513
515
|
tests/test_conflict_fix.py
|
|
514
516
|
tests/test_conflict_fix_semantic.py
|
|
515
517
|
tests/test_coord_test.py
|
|
518
|
+
tests/test_coord_test_runner_baseline.py
|
|
516
519
|
tests/test_coord_test_runner_routing.py
|
|
517
520
|
tests/test_coord_test_runner_toolchain.py
|
|
518
521
|
tests/test_coord_web_sse_restart_live.py
|
{code_coordinator-0.5.53 → code_coordinator-0.5.55}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -375,6 +375,7 @@
|
|
|
375
375
|
"scripts/drive-batch.sh",
|
|
376
376
|
"scripts/gen_board_fixture.py",
|
|
377
377
|
"scripts/next_release_tag.py",
|
|
378
|
+
"scripts/run_tests_in_populated_home.sh",
|
|
378
379
|
"scripts/run_tests_without_gh.sh",
|
|
379
380
|
"scripts/smoke_437_interactive.py",
|
|
380
381
|
"scripts/verify_878_review_capture.py",
|
|
@@ -455,6 +456,7 @@
|
|
|
455
456
|
"tests/test_agent_update_bluegreen.py",
|
|
456
457
|
"tests/test_agent_usage_limit.py",
|
|
457
458
|
"tests/test_agent_zero_commit.py",
|
|
459
|
+
"tests/test_ambient_home_isolation.py",
|
|
458
460
|
"tests/test_approve_reject_plan.py",
|
|
459
461
|
"tests/test_approve_usage_gate.py",
|
|
460
462
|
"tests/test_assignment_already_recorded_daemon.py",
|
|
@@ -543,6 +545,7 @@
|
|
|
543
545
|
"tests/test_conflict_fix.py",
|
|
544
546
|
"tests/test_conflict_fix_semantic.py",
|
|
545
547
|
"tests/test_coord_test.py",
|
|
548
|
+
"tests/test_coord_test_runner_baseline.py",
|
|
546
549
|
"tests/test_coord_test_runner_routing.py",
|
|
547
550
|
"tests/test_coord_test_runner_toolchain.py",
|
|
548
551
|
"tests/test_coord_web_sse_restart_live.py",
|
|
@@ -649,8 +649,40 @@ def test(assignment_id: str, config_path: Path, verdict: str | None, reason: str
|
|
|
649
649
|
|
|
650
650
|
if repo and repo.test_command:
|
|
651
651
|
click.echo(f"Running tests: {repo.test_command}")
|
|
652
|
-
|
|
652
|
+
# #2170: capture (stdout+stderr merged, same as an unpiped terminal
|
|
653
|
+
# would show) so a failure can be checked for the runner's `RESULT:
|
|
654
|
+
# BASELINE-RED` marker below — a failure the runner itself has
|
|
655
|
+
# already confirmed also reproduces on the merge-base is a
|
|
656
|
+
# statement about THIS MACHINE, not this branch, and must not be
|
|
657
|
+
# nudged towards `coord test --fail`. Relayed to the terminal after
|
|
658
|
+
# the run finishes rather than streamed live — the trade-off that
|
|
659
|
+
# buys the marker check `subprocess.run` (not `Popen`) keeps this
|
|
660
|
+
# call mockable exactly like every other one in this function.
|
|
661
|
+
result = subprocess.run(
|
|
662
|
+
repo.test_command, shell=True, cwd=str(wt_path),
|
|
663
|
+
stdout=subprocess.PIPE, stderr=subprocess.STDOUT, text=True,
|
|
664
|
+
)
|
|
665
|
+
if result.stdout:
|
|
666
|
+
click.echo(result.stdout, nl=False)
|
|
653
667
|
if result.returncode != 0:
|
|
668
|
+
from coord.revalidate import is_baseline_red_failure # noqa: PLC0415
|
|
669
|
+
|
|
670
|
+
if is_baseline_red_failure(result.returncode, result.stdout or ""):
|
|
671
|
+
click.echo(
|
|
672
|
+
f"\nTests failed (exit {result.returncode}) — but the "
|
|
673
|
+
"runner already confirmed every failure reproduces "
|
|
674
|
+
"identically on the merge-base (#2170): this machine's "
|
|
675
|
+
"BASELINE is red, not this branch.",
|
|
676
|
+
err=True,
|
|
677
|
+
)
|
|
678
|
+
click.echo(f" worktree kept for inspection: {wt_path}")
|
|
679
|
+
click.echo(
|
|
680
|
+
" run: coord test --skipped "
|
|
681
|
+
f"{assignment_id} --reason \"baseline-red (#2170): "
|
|
682
|
+
"pre-existing failures on this machine\" "
|
|
683
|
+
"# NOT --fail — the branch made nothing worse"
|
|
684
|
+
)
|
|
685
|
+
sys.exit(1)
|
|
654
686
|
click.echo(f"Tests failed (exit {result.returncode})", err=True)
|
|
655
687
|
click.echo(f" worktree kept for inspection: {wt_path}")
|
|
656
688
|
sys.exit(1)
|
|
@@ -1705,6 +1705,50 @@ def _capture_smoke_tests(transition: Transition, entry: dict) -> None:
|
|
|
1705
1705
|
)
|
|
1706
1706
|
|
|
1707
1707
|
|
|
1708
|
+
def _smoke_baseline_red_reason(transition: Transition, entry: dict) -> str | None:
|
|
1709
|
+
"""#2170: look for a `SMOKE: baseline-red <reason>` line in the smoke
|
|
1710
|
+
worker's transcript and return its reason text, or ``None`` if absent.
|
|
1711
|
+
|
|
1712
|
+
Same local-log-first, agent-endpoint-fallback discipline as
|
|
1713
|
+
:func:`_capture_smoke_tests` — this is read-only (nothing persisted here;
|
|
1714
|
+
the caller decides what to do with the reason), and best-effort: any
|
|
1715
|
+
lookup failure is logged and treated as "no baseline-red line found",
|
|
1716
|
+
which routes the caller to the ordinary `failed` verdict rather than
|
|
1717
|
+
silently swallowing a genuine branch failure.
|
|
1718
|
+
"""
|
|
1719
|
+
from coord.progress import ( # noqa: PLC0415
|
|
1720
|
+
parse_smoke_baseline_red_from_agent,
|
|
1721
|
+
parse_smoke_baseline_red_from_log,
|
|
1722
|
+
)
|
|
1723
|
+
|
|
1724
|
+
reason: str | None = None
|
|
1725
|
+
log_path = entry.get("log_path")
|
|
1726
|
+
if log_path:
|
|
1727
|
+
try:
|
|
1728
|
+
reason = parse_smoke_baseline_red_from_log(Path(log_path))
|
|
1729
|
+
except Exception as exc: # noqa: BLE001
|
|
1730
|
+
log.debug(
|
|
1731
|
+
"_smoke_baseline_red_reason: failed to parse local log for %s: %s",
|
|
1732
|
+
transition.assignment_id, exc,
|
|
1733
|
+
)
|
|
1734
|
+
|
|
1735
|
+
if reason is None:
|
|
1736
|
+
host = _agent_host(transition.machine_name)
|
|
1737
|
+
if host:
|
|
1738
|
+
try:
|
|
1739
|
+
reason = parse_smoke_baseline_red_from_agent(
|
|
1740
|
+
host, transition.assignment_id
|
|
1741
|
+
)
|
|
1742
|
+
except Exception as exc: # noqa: BLE001
|
|
1743
|
+
log.debug(
|
|
1744
|
+
"_smoke_baseline_red_reason: failed to fetch from agent "
|
|
1745
|
+
"%s for %s: %s",
|
|
1746
|
+
host, transition.assignment_id, exc,
|
|
1747
|
+
)
|
|
1748
|
+
|
|
1749
|
+
return reason
|
|
1750
|
+
|
|
1751
|
+
|
|
1708
1752
|
def _capture_cost(transition: Transition, entry: dict, record: dict | None = None) -> None:
|
|
1709
1753
|
"""#208/#546: parse the worker's final cost+tokens and persist them.
|
|
1710
1754
|
|
|
@@ -2332,17 +2376,52 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
2332
2376
|
transition.repo_name, transition.issue_number
|
|
2333
2377
|
)
|
|
2334
2378
|
if test_mode != "smoke":
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
|
|
2339
|
-
|
|
2340
|
-
|
|
2341
|
-
|
|
2342
|
-
|
|
2343
|
-
|
|
2344
|
-
|
|
2345
|
-
|
|
2379
|
+
exit_code = transition.exit_code or 0
|
|
2380
|
+
if exit_code == 0:
|
|
2381
|
+
record_test_verdict(
|
|
2382
|
+
assignment_id=parent_id,
|
|
2383
|
+
test_state="passed",
|
|
2384
|
+
test_reason="headless smoke",
|
|
2385
|
+
)
|
|
2386
|
+
else:
|
|
2387
|
+
# #2170: a non-zero smoke exit is not automatically the
|
|
2388
|
+
# branch's fault — check whether the dispatched agent
|
|
2389
|
+
# reported that the machine's own BASELINE is red (every
|
|
2390
|
+
# failure reproduces identically on the merge-base; see
|
|
2391
|
+
# `SMOKE_SYSTEM_PROMPT` step 4 in `coord.smoke`). The
|
|
2392
|
+
# marker is the signal, not the exit code, mirroring
|
|
2393
|
+
# `coord.revalidate.is_baseline_red_failure`'s discipline
|
|
2394
|
+
# — an arbitrary non-zero exit proves nothing on its own.
|
|
2395
|
+
baseline_red_reason = _smoke_baseline_red_reason(
|
|
2396
|
+
transition, entry
|
|
2397
|
+
)
|
|
2398
|
+
if baseline_red_reason is not None:
|
|
2399
|
+
# `skipped`, not `failed`: the merge gate treats a
|
|
2400
|
+
# skipped Test stage as satisfied, and neither
|
|
2401
|
+
# `coord fix` nor `coord drive` burns an attempt on
|
|
2402
|
+
# breakage this branch did not cause.
|
|
2403
|
+
record_test_verdict(
|
|
2404
|
+
assignment_id=parent_id,
|
|
2405
|
+
test_state="skipped",
|
|
2406
|
+
test_reason=(
|
|
2407
|
+
f"baseline-red (#2170): {baseline_red_reason}"
|
|
2408
|
+
if baseline_red_reason
|
|
2409
|
+
else "baseline-red (#2170): every failure "
|
|
2410
|
+
"reproduces identically on the merge-base"
|
|
2411
|
+
),
|
|
2412
|
+
)
|
|
2413
|
+
else:
|
|
2414
|
+
# #1384: no `smoke_test=` argument needed — the
|
|
2415
|
+
# writer (`state._record_test_verdict_local`)
|
|
2416
|
+
# derives the legacy mirror from `test_state`, so a
|
|
2417
|
+
# headless smoke FAILURE lands as
|
|
2418
|
+
# test_state='failed' AND smoke_test='fail' and
|
|
2419
|
+
# stays reachable from `coord fix`.
|
|
2420
|
+
record_test_verdict(
|
|
2421
|
+
assignment_id=parent_id,
|
|
2422
|
+
test_state="failed",
|
|
2423
|
+
test_reason="headless smoke",
|
|
2424
|
+
)
|
|
2346
2425
|
elif transition.event == EVENT_FAILURE and assignment_type == "smoke":
|
|
2347
2426
|
# #1605: the Test-stage WORKER itself died (a dead agent, a killed
|
|
2348
2427
|
# process group, a terminal API error — anything short of the
|
|
@@ -46,6 +46,17 @@ _SMOKE_NONE_RE = re.compile(
|
|
|
46
46
|
)
|
|
47
47
|
_SMOKE_BULLET_RE = re.compile(r"^\s*[-*]\s+(.+?)\s*$")
|
|
48
48
|
|
|
49
|
+
# #2170: the headless Test-stage smoke agent (`coord.smoke.SMOKE_SYSTEM_PROMPT`)
|
|
50
|
+
# prints this line instead of `SMOKE: fail` when the smoke command's own
|
|
51
|
+
# failures reproduce identically on the merge-base — a red BASELINE, not a
|
|
52
|
+
# branch failure. Line-anchored, mirroring `coord.revalidate`'s
|
|
53
|
+
# `is_baseline_red_failure` marker discipline: never a bare substring search,
|
|
54
|
+
# so an unrelated line that merely mentions "SMOKE: baseline-red" mid-sentence
|
|
55
|
+
# doesn't false-positive.
|
|
56
|
+
_SMOKE_BASELINE_RED_RE = re.compile(
|
|
57
|
+
r"^SMOKE:\s*baseline-red[ \t]*(.*)$", re.MULTILINE | re.IGNORECASE,
|
|
58
|
+
)
|
|
59
|
+
|
|
49
60
|
|
|
50
61
|
@dataclass
|
|
51
62
|
class WorkerProgress:
|
|
@@ -411,6 +422,112 @@ def parse_completion_summary_from_agent(
|
|
|
411
422
|
return _extract_completion_summary_from_text(text)
|
|
412
423
|
|
|
413
424
|
|
|
425
|
+
def _extract_smoke_baseline_red_from_text(text: str) -> str | None:
|
|
426
|
+
"""#2170: pull the last `SMOKE: baseline-red <reason>` line out of *text*.
|
|
427
|
+
|
|
428
|
+
Returns the reason string (possibly ``""`` if the agent gave none), or
|
|
429
|
+
``None`` if no such line is present — the same "None means absent"
|
|
430
|
+
contract as :func:`_extract_completion_summary_from_text`. Picks the LAST
|
|
431
|
+
match, matching every other block-extraction parser in this module, in
|
|
432
|
+
case the agent restates its verdict.
|
|
433
|
+
"""
|
|
434
|
+
matches = list(_SMOKE_BASELINE_RED_RE.finditer(text))
|
|
435
|
+
if not matches:
|
|
436
|
+
return None
|
|
437
|
+
return matches[-1].group(1).strip()
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
def parse_smoke_baseline_red_from_log(
|
|
441
|
+
log_path: str | Path, tail_bytes: int = 65_536,
|
|
442
|
+
) -> str | None:
|
|
443
|
+
"""#2170: read the tail of *log_path* and extract a `SMOKE: baseline-red`
|
|
444
|
+
verdict line, if the worker printed one.
|
|
445
|
+
|
|
446
|
+
Handles both stream-json logs (decodes assistant text events first) and
|
|
447
|
+
legacy plain-text logs, exactly like :func:`parse_smoke_tests_from_log`.
|
|
448
|
+
"""
|
|
449
|
+
p = Path(log_path)
|
|
450
|
+
if not p.exists():
|
|
451
|
+
return None
|
|
452
|
+
|
|
453
|
+
from coord.worker_events import is_stream_json # noqa: PLC0415
|
|
454
|
+
|
|
455
|
+
if is_stream_json(p):
|
|
456
|
+
from coord.worker_events import _assistant_text, parse_event # noqa: PLC0415
|
|
457
|
+
texts: list[str] = []
|
|
458
|
+
try:
|
|
459
|
+
with open(p, encoding="utf-8", errors="replace") as f:
|
|
460
|
+
for line in f:
|
|
461
|
+
event = parse_event(line.rstrip("\n"))
|
|
462
|
+
if event is None or event.type != "assistant":
|
|
463
|
+
continue
|
|
464
|
+
t = _assistant_text(event)
|
|
465
|
+
if t:
|
|
466
|
+
texts.append(t)
|
|
467
|
+
except OSError:
|
|
468
|
+
return None
|
|
469
|
+
return _extract_smoke_baseline_red_from_text("\n".join(texts))
|
|
470
|
+
|
|
471
|
+
try:
|
|
472
|
+
size = p.stat().st_size
|
|
473
|
+
with open(p, encoding="utf-8", errors="replace") as f:
|
|
474
|
+
if size > tail_bytes:
|
|
475
|
+
f.seek(size - tail_bytes)
|
|
476
|
+
f.readline() # skip partial line
|
|
477
|
+
text = f.read()
|
|
478
|
+
except OSError:
|
|
479
|
+
return None
|
|
480
|
+
return _extract_smoke_baseline_red_from_text(text)
|
|
481
|
+
|
|
482
|
+
|
|
483
|
+
def parse_smoke_baseline_red_from_agent(
|
|
484
|
+
host: str,
|
|
485
|
+
assignment_id: str,
|
|
486
|
+
port: int = 7433,
|
|
487
|
+
timeout: float = 15.0,
|
|
488
|
+
) -> str | None:
|
|
489
|
+
"""#2170: fetch a worker's log via the agent's ``/logs/<id>`` endpoint and
|
|
490
|
+
extract a `SMOKE: baseline-red` verdict line.
|
|
491
|
+
|
|
492
|
+
Use this instead of :func:`parse_smoke_baseline_red_from_log` when the
|
|
493
|
+
worker ran on a remote agent and the log isn't on the coordinator's local
|
|
494
|
+
filesystem. Mirrors :func:`parse_smoke_tests_from_agent`.
|
|
495
|
+
"""
|
|
496
|
+
import httpx # noqa: PLC0415
|
|
497
|
+
|
|
498
|
+
url = f"http://{host}:{port}/logs/{assignment_id}"
|
|
499
|
+
try:
|
|
500
|
+
resp = httpx.get(url, timeout=timeout)
|
|
501
|
+
resp.raise_for_status()
|
|
502
|
+
text = resp.text
|
|
503
|
+
except (httpx.HTTPError, httpx.TimeoutException):
|
|
504
|
+
return None
|
|
505
|
+
if not text:
|
|
506
|
+
return None
|
|
507
|
+
|
|
508
|
+
stream_json = False
|
|
509
|
+
for line in text.splitlines():
|
|
510
|
+
stripped = line.strip()
|
|
511
|
+
if not stripped or stripped.startswith("#"):
|
|
512
|
+
continue
|
|
513
|
+
stream_json = stripped.startswith("{")
|
|
514
|
+
break
|
|
515
|
+
|
|
516
|
+
if stream_json:
|
|
517
|
+
from coord.worker_events import _assistant_text, parse_event # noqa: PLC0415
|
|
518
|
+
decoded: list[str] = []
|
|
519
|
+
for line in text.splitlines():
|
|
520
|
+
event = parse_event(line.rstrip("\n"))
|
|
521
|
+
if event is None or event.type != "assistant":
|
|
522
|
+
continue
|
|
523
|
+
t = _assistant_text(event)
|
|
524
|
+
if t:
|
|
525
|
+
decoded.append(t)
|
|
526
|
+
return _extract_smoke_baseline_red_from_text("\n".join(decoded))
|
|
527
|
+
|
|
528
|
+
return _extract_smoke_baseline_red_from_text(text)
|
|
529
|
+
|
|
530
|
+
|
|
414
531
|
def _detect_warnings(progress: WorkerProgress, all_updates: list[str]) -> None:
|
|
415
532
|
if progress.stuck:
|
|
416
533
|
progress.warnings.append("worker is STUCK and waiting for guidance")
|
|
@@ -193,6 +193,12 @@ KIND_BUILD = "build"
|
|
|
193
193
|
KIND_SUITE = "suite"
|
|
194
194
|
KIND_TIMEOUT = "timeout"
|
|
195
195
|
KIND_INFRA = "infra"
|
|
196
|
+
#: The suite RAN and failed, but identically on the merge-base (#2170) — so it
|
|
197
|
+
#: is a statement about the machine's baseline, not about any branch. Distinct
|
|
198
|
+
#: from :data:`KIND_INFRA` (where the suite never ran at all) and from
|
|
199
|
+
#: :data:`KIND_SUITE` (where the branch broke something): the operator action is
|
|
200
|
+
#: "fix the baseline", not "fix the runner environment" or "fix the branch".
|
|
201
|
+
KIND_BASELINE_RED = "baseline_red"
|
|
196
202
|
|
|
197
203
|
#: Composite failure kinds a per-entry pass can actually narrow (#1715).
|
|
198
204
|
NARROWABLE_KINDS = frozenset({
|
|
@@ -221,6 +227,20 @@ SHELL_NOT_FOUND_EXIT = 127
|
|
|
221
227
|
#: relabel real red builds as infrastructure — the dangerous direction.
|
|
222
228
|
INFRA_OUTPUT_MARKERS = ("TOOLCHAIN MISSING", "RESULT: INFRA")
|
|
223
229
|
|
|
230
|
+
#: What ``coord-test-runner.sh`` prints when every failure in a suite reproduces
|
|
231
|
+
#: on the merge-base (#2170), and the exit code it pairs with it.
|
|
232
|
+
#:
|
|
233
|
+
#: Same "the marker, not the number" discipline as :data:`INFRA_OUTPUT_MARKERS`
|
|
234
|
+
#: above, and the same line-start anchoring: an arbitrary repo's command is free
|
|
235
|
+
#: to exit 4 for a real failure (pytest itself uses 4 for a usage error), so the
|
|
236
|
+
#: number alone must never be enough to excuse a red suite.
|
|
237
|
+
BASELINE_RED_OUTPUT_MARKER = "RESULT: BASELINE-RED"
|
|
238
|
+
|
|
239
|
+
#: Exit code ``scripts/coord-test-runner.sh`` reserves for baseline-red.
|
|
240
|
+
#: Documented, and — like :data:`RUNNER_INFRA_EXIT` — deliberately not trusted
|
|
241
|
+
#: on its own.
|
|
242
|
+
RUNNER_BASELINE_RED_EXIT = 4
|
|
243
|
+
|
|
224
244
|
|
|
225
245
|
def is_infrastructure_failure(returncode: int, output: str) -> bool:
|
|
226
246
|
"""True when a build/test command never actually ran the suite (#1814).
|
|
@@ -270,6 +290,53 @@ def is_infrastructure_failure(returncode: int, output: str) -> bool:
|
|
|
270
290
|
)
|
|
271
291
|
|
|
272
292
|
|
|
293
|
+
def is_baseline_red_failure(returncode: int, output: str) -> bool:
|
|
294
|
+
"""True when a test command failed but every failure also fails on the
|
|
295
|
+
merge-base (#2170) — i.e. the machine's baseline is red.
|
|
296
|
+
|
|
297
|
+
ONE signal only, and it is the runner's own explicit statement: a
|
|
298
|
+
:data:`BASELINE_RED_OUTPUT_MARKER` line. :data:`RUNNER_BASELINE_RED_EXIT` is
|
|
299
|
+
NOT a signal on its own, for the same reason exit 3 isn't for infrastructure
|
|
300
|
+
— an arbitrary repo's `test_command` may exit 4 for a perfectly genuine
|
|
301
|
+
failure (pytest's own usage-error code is 4), and keying on the number would
|
|
302
|
+
relabel real red suites as "not the branch's fault". That is the dangerous
|
|
303
|
+
direction: it is the one that could eventually launder a regression into a
|
|
304
|
+
merge, so it must require the runner to have said so in words.
|
|
305
|
+
|
|
306
|
+
Line-anchored rather than a bare substring search, exactly as
|
|
307
|
+
:func:`is_infrastructure_failure` documents at length: for this repo the
|
|
308
|
+
``test_command`` IS that runner's pytest arm, so the suite contains tests
|
|
309
|
+
(``tests/test_coord_test_runner_baseline.py``, and this module's own) whose
|
|
310
|
+
assertion text and parametrize ids embed this marker verbatim. Those only
|
|
311
|
+
ever appear indented (``E ``/spaces) or prefixed (``FAILED ``), never at
|
|
312
|
+
the start of a line.
|
|
313
|
+
|
|
314
|
+
``returncode`` is accepted and ignored for signature symmetry with
|
|
315
|
+
:func:`is_infrastructure_failure`; callers pass what they have.
|
|
316
|
+
"""
|
|
317
|
+
lines = (output or "").splitlines()
|
|
318
|
+
return any(line.startswith(BASELINE_RED_OUTPUT_MARKER) for line in lines)
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
def _baseline_red_reason(stage: str, returncode: int) -> str:
|
|
322
|
+
"""Operator-facing wording for a red baseline (#2170).
|
|
323
|
+
|
|
324
|
+
Must not say "SUITE FAILED" (the operator would debug a branch that is
|
|
325
|
+
fine), must not say "could not run" (it ran, and told us something), and
|
|
326
|
+
must name the BASELINE as the thing to fix. The failure that motivated it
|
|
327
|
+
read as a branch problem for months and was not one.
|
|
328
|
+
"""
|
|
329
|
+
return (
|
|
330
|
+
f"revalidation reports a RED BASELINE — the {stage} command failed "
|
|
331
|
+
f"(exit {returncode}), but every failure reproduces on the merge-base "
|
|
332
|
+
"in this environment, so the branches made nothing worse and NONE of "
|
|
333
|
+
"them was judged. Nothing merged, nothing marked failed, no verdict "
|
|
334
|
+
"changed. Fix the baseline (or this machine's environment) and re-run: "
|
|
335
|
+
"a machine whose suite cannot go green cannot produce a Test verdict "
|
|
336
|
+
"for any branch (#2170)"
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
|
|
273
340
|
@dataclass
|
|
274
341
|
class RevalidationResult:
|
|
275
342
|
"""Outcome of one composite revalidation run.
|
|
@@ -698,12 +765,21 @@ def revalidate(
|
|
|
698
765
|
if built.returncode != 0:
|
|
699
766
|
build_output = (built.stdout or "") + "\n" + (built.stderr or "")
|
|
700
767
|
infra = is_infrastructure_failure(built.returncode, build_output)
|
|
768
|
+
baseline_red = not infra and is_baseline_red_failure(
|
|
769
|
+
built.returncode, build_output
|
|
770
|
+
)
|
|
701
771
|
return RevalidationResult(
|
|
702
772
|
ok=False,
|
|
703
|
-
kind=
|
|
773
|
+
kind=(
|
|
774
|
+
KIND_INFRA if infra
|
|
775
|
+
else KIND_BASELINE_RED if baseline_red
|
|
776
|
+
else KIND_BUILD
|
|
777
|
+
),
|
|
704
778
|
reason=(
|
|
705
779
|
_infra_reason("build", built.returncode)
|
|
706
780
|
if infra
|
|
781
|
+
else _baseline_red_reason("build", built.returncode)
|
|
782
|
+
if baseline_red
|
|
707
783
|
else (
|
|
708
784
|
"revalidation BUILD FAILED against the current base "
|
|
709
785
|
f"(exit {built.returncode}) — every candidate stays "
|
|
@@ -729,12 +805,21 @@ def revalidate(
|
|
|
729
805
|
if tested.returncode != 0:
|
|
730
806
|
test_output = (tested.stdout or "") + "\n" + (tested.stderr or "")
|
|
731
807
|
infra = is_infrastructure_failure(tested.returncode, test_output)
|
|
808
|
+
baseline_red = not infra and is_baseline_red_failure(
|
|
809
|
+
tested.returncode, test_output
|
|
810
|
+
)
|
|
732
811
|
return RevalidationResult(
|
|
733
812
|
ok=False,
|
|
734
|
-
kind=
|
|
813
|
+
kind=(
|
|
814
|
+
KIND_INFRA if infra
|
|
815
|
+
else KIND_BASELINE_RED if baseline_red
|
|
816
|
+
else KIND_SUITE
|
|
817
|
+
),
|
|
735
818
|
reason=(
|
|
736
819
|
_infra_reason("suite", tested.returncode)
|
|
737
820
|
if infra
|
|
821
|
+
else _baseline_red_reason("suite", tested.returncode)
|
|
822
|
+
if baseline_red
|
|
738
823
|
else (
|
|
739
824
|
"revalidation SUITE FAILED against the current base "
|
|
740
825
|
f"(exit {tested.returncode}) — every candidate stays "
|
|
@@ -983,6 +1068,19 @@ def format_batch(batch: BatchRevalidationResult) -> list[str]:
|
|
|
983
1068
|
)
|
|
984
1069
|
return lines
|
|
985
1070
|
|
|
1071
|
+
if batch.composite.kind == KIND_BASELINE_RED:
|
|
1072
|
+
# #2170: the OTHER failure mode that is not about the branches. Same
|
|
1073
|
+
# stdout-as-well-as-stderr treatment as INFRA above and for the same
|
|
1074
|
+
# reason — but a different instruction, because the fix is in the
|
|
1075
|
+
# baseline (or this machine's environment), not the runner's toolchain.
|
|
1076
|
+
lines.append(
|
|
1077
|
+
" --revalidate: RED BASELINE — the suite failed, but identically "
|
|
1078
|
+
"on the merge-base, so no branch was judged. Nothing merged, "
|
|
1079
|
+
"nothing marked failed, no verdict changed; every candidate is "
|
|
1080
|
+
"exactly as it was. Fix the baseline, then re-run --revalidate."
|
|
1081
|
+
)
|
|
1082
|
+
return lines
|
|
1083
|
+
|
|
986
1084
|
if not batch.fell_back:
|
|
987
1085
|
return lines
|
|
988
1086
|
|
|
@@ -1075,6 +1173,7 @@ __all__ = [
|
|
|
1075
1173
|
"DEFAULT_TIMEOUT_SECONDS",
|
|
1076
1174
|
"KIND_BUILD",
|
|
1077
1175
|
"KIND_COMPOSE",
|
|
1176
|
+
"KIND_BASELINE_RED",
|
|
1078
1177
|
"KIND_INFRA",
|
|
1079
1178
|
"KIND_OK",
|
|
1080
1179
|
"KIND_SETUP",
|
|
@@ -1083,6 +1182,7 @@ __all__ = [
|
|
|
1083
1182
|
"MAX_REVALIDATION_BATCH",
|
|
1084
1183
|
"NARROWABLE_KINDS",
|
|
1085
1184
|
"NO_SUITE_RAN_KINDS",
|
|
1185
|
+
"RUNNER_BASELINE_RED_EXIT",
|
|
1086
1186
|
"RUNNER_INFRA_EXIT",
|
|
1087
1187
|
"SHELL_NOT_FOUND_EXIT",
|
|
1088
1188
|
"BatchRevalidationResult",
|
|
@@ -1093,6 +1193,7 @@ __all__ = [
|
|
|
1093
1193
|
"format_batch",
|
|
1094
1194
|
"format_failure",
|
|
1095
1195
|
"group_candidates",
|
|
1196
|
+
"is_baseline_red_failure",
|
|
1096
1197
|
"is_infrastructure_failure",
|
|
1097
1198
|
"local_repo_dir",
|
|
1098
1199
|
"revalidate",
|
|
@@ -57,6 +57,12 @@ from coord import github_ops
|
|
|
57
57
|
from coord.config import Config, SmokeRule, SmokeTestsConfig
|
|
58
58
|
from coord.dispatch import AGENT_PORT
|
|
59
59
|
from coord.models import WORK_LIKE_TYPES, Assignment, Board, Machine
|
|
60
|
+
# #2170: the SAME marker/exit-code convention `scripts/coord-test-runner.sh`
|
|
61
|
+
# and `coord.revalidate` use for a red baseline — imported (not re-literalled)
|
|
62
|
+
# so the dispatched smoke agent's instructions can never drift from what the
|
|
63
|
+
# runner actually emits, or from what `coord.notify` parses back out of the
|
|
64
|
+
# agent's own transcript (see `_smoke_baseline_red_reason` there).
|
|
65
|
+
from coord.revalidate import BASELINE_RED_OUTPUT_MARKER, RUNNER_BASELINE_RED_EXIT
|
|
60
66
|
|
|
61
67
|
logger = logging.getLogger("coord.smoke")
|
|
62
68
|
|
|
@@ -75,7 +81,7 @@ logger = logging.getLogger("coord.smoke")
|
|
|
75
81
|
_TEST_MODE_SKIP_LOGGED: set[str] = set()
|
|
76
82
|
|
|
77
83
|
|
|
78
|
-
SMOKE_SYSTEM_PROMPT = """\
|
|
84
|
+
SMOKE_SYSTEM_PROMPT = f"""\
|
|
79
85
|
You are a smoke-test runner dispatched by the coordinator. \
|
|
80
86
|
Your only job: pull the branch, run the smoke command, report pass/fail.
|
|
81
87
|
|
|
@@ -89,8 +95,9 @@ Rules:
|
|
|
89
95
|
- Do NOT run `gh` commands. The coordinator owns GitHub interactions.
|
|
90
96
|
- You MAY run git, build commands, and test commands.
|
|
91
97
|
- Exit code is what the coordinator reads — exit 0 on pass, non-zero on \
|
|
92
|
-
fail. Print a final line `SMOKE: pass
|
|
93
|
-
before exiting so logs
|
|
98
|
+
fail. Print a final line `SMOKE: pass`, `SMOKE: fail <one-line reason>`, or \
|
|
99
|
+
`SMOKE: baseline-red <one-line reason>` (see step 4) before exiting so logs \
|
|
100
|
+
are readable.
|
|
94
101
|
|
|
95
102
|
Where you are:
|
|
96
103
|
- You are in a dedicated git worktree created for this run. Every git command \
|
|
@@ -105,7 +112,19 @@ Steps:
|
|
|
105
112
|
briefing) — in your worktree, never in the base checkout.
|
|
106
113
|
2. Run the smoke command from the briefing. Capture stdout/stderr.
|
|
107
114
|
3. If it exits 0 → print `SMOKE: pass` and exit 0.
|
|
108
|
-
4. If it
|
|
115
|
+
4. If it exits {RUNNER_BASELINE_RED_EXIT} AND its output contains a line \
|
|
116
|
+
starting with literal text `{BASELINE_RED_OUTPUT_MARKER}` (#2170) — the smoke \
|
|
117
|
+
command already re-ran its own failures against the merge-base in this same \
|
|
118
|
+
environment and found every one of them fails there too. That is a statement \
|
|
119
|
+
about THIS MACHINE, not the branch: do NOT report it as `SMOKE: fail`, and do \
|
|
120
|
+
NOT report it as `SMOKE: pass` either (that would hide a red baseline). Print \
|
|
121
|
+
`SMOKE: baseline-red <one-line reason>` (reuse the runner's own \
|
|
122
|
+
`{BASELINE_RED_OUTPUT_MARKER}` line as the reason) and exit \
|
|
123
|
+
{RUNNER_BASELINE_RED_EXIT} yourself, matching the smoke command's own exit \
|
|
124
|
+
code.
|
|
125
|
+
5. Otherwise (any other non-zero exit, or a failure with no \
|
|
126
|
+
`{BASELINE_RED_OUTPUT_MARKER}` line) → print `SMOKE: fail <short reason>` and \
|
|
127
|
+
exit non-zero (any code other than 0 or {RUNNER_BASELINE_RED_EXIT}).
|
|
109
128
|
"""
|
|
110
129
|
|
|
111
130
|
|