code-coordinator 0.5.61__tar.gz → 0.5.63__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.61/code_coordinator.egg-info → code_coordinator-0.5.63}/PKG-INFO +1 -1
- {code_coordinator-0.5.61 → code_coordinator-0.5.63/code_coordinator.egg-info}/PKG-INFO +1 -1
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/acceptance.py +69 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/agent.py +89 -11
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/drive_queue.py +77 -14
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/db.py +14 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dispatch.py +8 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/drive.py +27 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/drive_queue.py +179 -30
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/merge_queue.py +55 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/models.py +16 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notify.py +18 -1
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/reports.py +8 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/serve_app.py +5 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/state.py +28 -9
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/test_author.py +22 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/AGENT_OPERATIONS.md +3 -2
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_acceptance.py +65 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_zero_commit.py +166 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_drive_queue.py +163 -7
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_db.py +98 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dispatch.py +35 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_drive.py +71 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_drive_queue.py +109 -13
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_merge_queue.py +124 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notify.py +60 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reports.py +25 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_test_author.py +31 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/drive_queue.rs +236 -26
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/types.rs +11 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/tests/fixtures/board_sample.json +2 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/.gitignore +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/CLAUDE.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/GOAL.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/LICENSE +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/MANIFEST.in +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/README.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/audit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/board_service.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/brain.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/claim.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/cli.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/client.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/comments.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/config.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dao.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/deps.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/events.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/filelock.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/freshness.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/gates.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/goal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/context.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/models.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/render.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/health/units.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/hooks.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/interactive.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/network.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/openapi.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/parentage.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/plans.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/progress.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/release_window.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/review.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/smoke.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/split_work.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/test_report.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/usage.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/install-agent.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/pyproject.toml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/setup.cfg +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/__init__.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/conftest.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_config.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_events.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_init.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_models.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_network.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_session.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_split.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_state.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.61 → code_coordinator-0.5.63}/tui/tests/cli.rs +0 -0
|
@@ -886,6 +886,75 @@ def find_ms_manifest_for_issue_via_api(
|
|
|
886
886
|
return None
|
|
887
887
|
|
|
888
888
|
|
|
889
|
+
def missing_expected_red_warning(
|
|
890
|
+
repo_github: str, branch: str, issue_number: int, *, gh_ops: Any = None,
|
|
891
|
+
) -> str | None:
|
|
892
|
+
"""#2191 — the writer/gate seam: is *issue_number* the signature of an
|
|
893
|
+
unwritten ``expected_red`` registry on *branch*'s manifest? That
|
|
894
|
+
signature is checkable without ever running the suite: the manifest
|
|
895
|
+
maps at least one test id to *issue_number* (a slice was authored for
|
|
896
|
+
it) but records ZERO ``expected_red`` entries for it, and the issue is
|
|
897
|
+
still open. #2164 shipped a reader (:func:`apply_expected_red`), a
|
|
898
|
+
clearer (:func:`clear_expected_red_via_pr`) and a lister
|
|
899
|
+
(:func:`list_expected_red_via_api`) for this registry but no writer —
|
|
900
|
+
:data:`coord.test_author.TEST_AUTHOR_SYSTEM_PROMPT` step 4b is the
|
|
901
|
+
writer (the test-author records what it observed FAIL in its step-4
|
|
902
|
+
run). This function is the gate half: it does not trust the prompt was
|
|
903
|
+
followed, so it re-derives "was anything recorded" from the manifest
|
|
904
|
+
itself at slice-PR-open time (:func:`coord.merge_queue.process`'s
|
|
905
|
+
"Open PRs first" loop, gated on ``assignment_type == "test-author"``)
|
|
906
|
+
and flags exactly the case a skipped step 4b produces.
|
|
907
|
+
|
|
908
|
+
Returns ``None`` — nothing to flag — when: *branch*'s manifest doesn't
|
|
909
|
+
reference *issue_number* at all (no slice authored yet, out of scope);
|
|
910
|
+
``expected_red`` already has a non-empty entry for it (the writer did
|
|
911
|
+
its job, or the slice is genuinely all-green and needs none); the issue
|
|
912
|
+
is closed (its slice already served its purpose — flagging it now is
|
|
913
|
+
stale noise, not #2191's live deadlock); or any lookup fails. The last
|
|
914
|
+
case is deliberate fail-open, matching every other best-effort API
|
|
915
|
+
sweep in this module (:func:`find_ms_manifest_for_issue_via_api`,
|
|
916
|
+
:func:`coord.merge_queue._issue_has_expected_red_entries`) — this check
|
|
917
|
+
is advisory (see the "refused or warned" phrasing in #2191's acceptance
|
|
918
|
+
criteria; callers choose which), so an unreachable API must degrade to
|
|
919
|
+
"say nothing," never to blocking a PR the check itself couldn't
|
|
920
|
+
evaluate.
|
|
921
|
+
|
|
922
|
+
Otherwise returns a human-readable warning naming the missing ids.
|
|
923
|
+
"""
|
|
924
|
+
ops = gh_ops or _default_github_ops()
|
|
925
|
+
found = find_ms_manifest_for_issue_via_api(
|
|
926
|
+
repo_github, branch, issue_number, gh_ops=ops,
|
|
927
|
+
)
|
|
928
|
+
if found is None:
|
|
929
|
+
return None
|
|
930
|
+
path, _text, _blob_sha, data = found
|
|
931
|
+
if data.expected_red.get(issue_number):
|
|
932
|
+
return None
|
|
933
|
+
test_ids = test_ids_for_issue(data.tests, issue_number)
|
|
934
|
+
if not test_ids:
|
|
935
|
+
return None
|
|
936
|
+
live_state = getattr(ops, "get_issues_live_state", None)
|
|
937
|
+
if live_state is None:
|
|
938
|
+
return None
|
|
939
|
+
try:
|
|
940
|
+
states = live_state(repo_github, [issue_number])
|
|
941
|
+
except Exception: # noqa: BLE001 — best-effort, fail open (see docstring)
|
|
942
|
+
return None
|
|
943
|
+
if states.get(issue_number) != "open":
|
|
944
|
+
return None
|
|
945
|
+
return (
|
|
946
|
+
f"#{issue_number}: {path} maps {len(test_ids)} test-id(s) to this "
|
|
947
|
+
f"issue ({', '.join(sorted(test_ids))}) but records no "
|
|
948
|
+
"`expected_red` entries for it — the #2191 signature of an "
|
|
949
|
+
"unwritten registry (the test-author's step 4b never ran, or was "
|
|
950
|
+
"skipped). If this slice is genuinely all-green already, ignore; "
|
|
951
|
+
"otherwise every red id here fails CI with nothing telling "
|
|
952
|
+
"`coord acceptance run --all --ci` that's expected, and `coord "
|
|
953
|
+
"merge` will need `--force-merge` or a hand-edited manifest to "
|
|
954
|
+
"land it."
|
|
955
|
+
)
|
|
956
|
+
|
|
957
|
+
|
|
889
958
|
def list_expected_red_via_api(
|
|
890
959
|
repo_github: str, branch: str, *, gh_ops: Any = None,
|
|
891
960
|
) -> "dict[str, dict[int, frozenset[str]]]":
|
|
@@ -26,6 +26,7 @@ from pathlib import Path
|
|
|
26
26
|
from typing import TYPE_CHECKING, Any, Callable, Iterable
|
|
27
27
|
|
|
28
28
|
from coord import cargo_cache
|
|
29
|
+
from coord.models import DELIVERABLE_ANALYSIS_LABEL
|
|
29
30
|
from coord.platform_paths import default_coord_dir
|
|
30
31
|
|
|
31
32
|
if TYPE_CHECKING:
|
|
@@ -604,6 +605,19 @@ class AssignmentSpec:
|
|
|
604
605
|
# `AssignmentSpec(**body)` in agent_app.py 400s on those) unless the
|
|
605
606
|
# operator has actually configured one.
|
|
606
607
|
cost_ceiling_usd: float | None = None
|
|
608
|
+
# #2188: the issue's GitHub label names, mirroring `Proposal.issue_labels`
|
|
609
|
+
# (#1430) — carried on the wire so a reap running on a config-free agent
|
|
610
|
+
# (docs/EPHEMERAL_WORKERS.md; no local DB or GitHub token to ask) can
|
|
611
|
+
# still see `coord.models.DELIVERABLE_ANALYSIS_LABEL` without an extra
|
|
612
|
+
# round-trip. Only `coord/dispatch.py`'s `dispatch()` populates this (from
|
|
613
|
+
# `proposal.issue_labels`, itself only set for `type="work"` dispatches —
|
|
614
|
+
# see #1430's `model_for_labels`/`provider_for_labels` gating), and only
|
|
615
|
+
# when non-empty — an agent predating this field 400s on an unrecognized
|
|
616
|
+
# kwarg (`AssignmentSpec(**body)` in agent_app.py), same discipline as
|
|
617
|
+
# every other optional wire field above. Empty by default: a spec with no
|
|
618
|
+
# labels (or dispatched by a caller that never populated
|
|
619
|
+
# `Proposal.issue_labels`) behaves exactly as before this field existed.
|
|
620
|
+
issue_labels: list[str] = field(default_factory=list)
|
|
607
621
|
|
|
608
622
|
|
|
609
623
|
class _GitError(RuntimeError):
|
|
@@ -2700,6 +2714,11 @@ class AgentAssignment:
|
|
|
2700
2714
|
# #448: advisory reason when the worker exited cleanly (exit_code==0) but
|
|
2701
2715
|
# pushed 0 commits. None on all other status values.
|
|
2702
2716
|
#
|
|
2717
|
+
# #2188: also None (never set) for an issue labelled `deliverable:
|
|
2718
|
+
# analysis` — that shape lands on `status == DONE`/`analysis_deliverable
|
|
2719
|
+
# = True` below instead, since 0 commits is its SUCCESS condition, not
|
|
2720
|
+
# something advisory.
|
|
2721
|
+
#
|
|
2703
2722
|
# #1323 used to *also* reuse this field (for "work"-type assignments,
|
|
2704
2723
|
# see _ADVISORY_TYPES) to hold a reason when a configured artifact_paths
|
|
2705
2724
|
# glob matched 0 files, downgrading DONE -> ADVISORY in the process.
|
|
@@ -2787,6 +2806,26 @@ class AgentAssignment:
|
|
|
2787
2806
|
# ceiling kill is indistinguishable from a crash and the money is spent
|
|
2788
2807
|
# again on the next pass.
|
|
2789
2808
|
spend_ceiling_reason: str | None = None
|
|
2809
|
+
# #2188: True when `_reap` classified a clean (exit_code==0), 0-commit
|
|
2810
|
+
# exit as a DELIVERABLE — the issue was labelled
|
|
2811
|
+
# `coord.models.DELIVERABLE_ANALYSIS_LABEL` (`spec.issue_labels`) — rather
|
|
2812
|
+
# than the #448 "worker did nothing" ADVISORY. Only ever set alongside
|
|
2813
|
+
# `status == DONE`; `False` on every other outcome, including a normal
|
|
2814
|
+
# zero-commit ADVISORY (the label wasn't present) and a labelled issue
|
|
2815
|
+
# whose worker actually pushed commits (that's an ordinary DONE, handled
|
|
2816
|
+
# by the ordinary Test/Review/Merge pipeline — this flag is specifically
|
|
2817
|
+
# "the deliverable IS the message, there is no diff").
|
|
2818
|
+
analysis_deliverable: bool = False
|
|
2819
|
+
# #2188: the worker's own final message — `result` off the last
|
|
2820
|
+
# stream-json `result` event (`coord.worker_events.WorkerSummary.
|
|
2821
|
+
# result_text`), captured here so the coordinator can post the actual
|
|
2822
|
+
# deliverable (a diagnosis/audit's prose) to the issue instead of a bare
|
|
2823
|
+
# "assignment complete" comment. The worker itself has no `gh` access to
|
|
2824
|
+
# post this — see coord.notify.post_transition's EVENT_COMPLETION arm.
|
|
2825
|
+
# Populated only when `analysis_deliverable` is True; `None` otherwise
|
|
2826
|
+
# (a normal work assignment's deliverable is the diff itself, already
|
|
2827
|
+
# visible on the PR — restating the transcript there would be noise).
|
|
2828
|
+
result_text: str | None = None
|
|
2790
2829
|
|
|
2791
2830
|
def to_dict(self) -> dict:
|
|
2792
2831
|
d = asdict(self)
|
|
@@ -7209,6 +7248,16 @@ class AgentServer:
|
|
|
7209
7248
|
# ("work",) to the full work-like set so `test-author`/`mock-author`
|
|
7210
7249
|
# get the same downgrade; before that they could land on `done` with
|
|
7211
7250
|
# an empty branch.
|
|
7251
|
+
# #2188: an issue labelled `deliverable:analysis` inverts the #448
|
|
7252
|
+
# reading — for it, a clean exit with 0 commits is the SUCCESS
|
|
7253
|
+
# condition (the deliverable is the worker's own final message, not
|
|
7254
|
+
# a diff), not the "worker did nothing" anomaly. Detected off
|
|
7255
|
+
# `assignment.spec.issue_labels` (wire field, #2188) so this works on
|
|
7256
|
+
# a config-free agent too — no DB or GitHub read required. Resolved
|
|
7257
|
+
# in the SAME `_ahead == 0` branch as the advisory check below so
|
|
7258
|
+
# the two can never disagree about what "0 commits" means for this
|
|
7259
|
+
# assignment.
|
|
7260
|
+
_analysis_deliverable = False
|
|
7212
7261
|
_zero_commit_reason: str | None = None
|
|
7213
7262
|
if (exit_code == 0 and assignment is not None
|
|
7214
7263
|
and assignment.worktree_path
|
|
@@ -7218,17 +7267,30 @@ class AgentServer:
|
|
|
7218
7267
|
_base = assignment.spec.branch or "main"
|
|
7219
7268
|
_ahead = self._commits_ahead(_wt_advisory, _base)
|
|
7220
7269
|
if _ahead == 0:
|
|
7221
|
-
|
|
7222
|
-
|
|
7223
|
-
|
|
7224
|
-
|
|
7225
|
-
|
|
7226
|
-
|
|
7227
|
-
|
|
7228
|
-
|
|
7229
|
-
|
|
7230
|
-
|
|
7231
|
-
|
|
7270
|
+
if DELIVERABLE_ANALYSIS_LABEL in (assignment.spec.issue_labels or []):
|
|
7271
|
+
_analysis_deliverable = True
|
|
7272
|
+
try:
|
|
7273
|
+
with open(assignment.log_path, "a") as reopen:
|
|
7274
|
+
reopen.write(
|
|
7275
|
+
"# reap: analysis deliverable — 0 commits "
|
|
7276
|
+
f"ahead of {_base}; issue labelled "
|
|
7277
|
+
f"{DELIVERABLE_ANALYSIS_LABEL!r}, status "
|
|
7278
|
+
"set to done (#2188)\n"
|
|
7279
|
+
)
|
|
7280
|
+
except OSError:
|
|
7281
|
+
pass
|
|
7282
|
+
else:
|
|
7283
|
+
_zero_commit_reason = (
|
|
7284
|
+
"worker exited cleanly but pushed 0 commits"
|
|
7285
|
+
)
|
|
7286
|
+
try:
|
|
7287
|
+
with open(assignment.log_path, "a") as reopen:
|
|
7288
|
+
reopen.write(
|
|
7289
|
+
"# reap: advisory — 0 commits ahead of "
|
|
7290
|
+
f"{_base}; status set to advisory\n"
|
|
7291
|
+
)
|
|
7292
|
+
except OSError:
|
|
7293
|
+
pass
|
|
7232
7294
|
|
|
7233
7295
|
# This block MUST always run regardless of push outcome so that
|
|
7234
7296
|
# the assignment transitions out of 'running'.
|
|
@@ -7296,6 +7358,22 @@ class AgentServer:
|
|
|
7296
7358
|
assignment.zero_commit_reason = _zero_commit_reason
|
|
7297
7359
|
else:
|
|
7298
7360
|
assignment.status = DONE
|
|
7361
|
+
if _analysis_deliverable:
|
|
7362
|
+
# #2188: 0 commits on a `deliverable:analysis`
|
|
7363
|
+
# issue is the success shape — capture the
|
|
7364
|
+
# worker's own final message (already parsed
|
|
7365
|
+
# into `_worker_summary` above) so the
|
|
7366
|
+
# coordinator can post the actual deliverable to
|
|
7367
|
+
# the issue instead of a bare "complete" comment.
|
|
7368
|
+
# Best-effort: a non-stream-json log (or one with
|
|
7369
|
+
# no terminal `result` event) just leaves
|
|
7370
|
+
# `result_text` `None` — the assignment is still
|
|
7371
|
+
# correctly `done`, only the auto-posted prose is
|
|
7372
|
+
# missing, same degradation as every other
|
|
7373
|
+
# best-effort log parse in this function.
|
|
7374
|
+
assignment.analysis_deliverable = True
|
|
7375
|
+
if _worker_summary is not None and _worker_summary.result_text:
|
|
7376
|
+
assignment.result_text = _worker_summary.result_text
|
|
7299
7377
|
else:
|
|
7300
7378
|
assignment.status = FAILED
|
|
7301
7379
|
# #1461: only ever attaches to a FAILED/ADVISORY transition —
|
|
@@ -43,6 +43,8 @@ from coord.drive_queue import (
|
|
|
43
43
|
DEFAULT_MAX_ATTEMPTS,
|
|
44
44
|
DEFAULT_MAX_PARALLEL_PER_REPO,
|
|
45
45
|
HOLD_RELEASED,
|
|
46
|
+
HOLD_SCOPE_ENTRY,
|
|
47
|
+
HOLD_SCOPE_FLEET,
|
|
46
48
|
QUEUE_ALERT_ISSUE,
|
|
47
49
|
QUEUE_ALERT_REPO,
|
|
48
50
|
QUEUE_ALERT_STAGE,
|
|
@@ -155,6 +157,19 @@ def drive_queue_group() -> None:
|
|
|
155
157
|
"treated as a failure. Requires --hold-after."
|
|
156
158
|
),
|
|
157
159
|
)
|
|
160
|
+
@click.option(
|
|
161
|
+
"--scope",
|
|
162
|
+
"hold_scope",
|
|
163
|
+
type=click.Choice([HOLD_SCOPE_ENTRY, HOLD_SCOPE_FLEET]),
|
|
164
|
+
default=HOLD_SCOPE_ENTRY,
|
|
165
|
+
show_default=True,
|
|
166
|
+
help=(
|
|
167
|
+
"How far a fired gate reaches (#2186). `entry` holds only entries "
|
|
168
|
+
"whose own --after names THIS one. `fleet` is the whole-queue stop — "
|
|
169
|
+
"launch NOTHING anywhere, for the rare case (a rename, a schema "
|
|
170
|
+
"migration) where that is really what's needed. Requires --hold-after."
|
|
171
|
+
),
|
|
172
|
+
)
|
|
158
173
|
@_CONFIG_OPTION
|
|
159
174
|
def drive_queue_add(
|
|
160
175
|
repo: str,
|
|
@@ -165,6 +180,7 @@ def drive_queue_add(
|
|
|
165
180
|
hold_after: bool,
|
|
166
181
|
hold_reason: str,
|
|
167
182
|
resume_when: str,
|
|
183
|
+
hold_scope: str,
|
|
168
184
|
config_path: Path,
|
|
169
185
|
) -> None:
|
|
170
186
|
"""Queue REPO ISSUE for `coord drive`, or update it if already queued.
|
|
@@ -175,14 +191,36 @@ def drive_queue_add(
|
|
|
175
191
|
"""
|
|
176
192
|
from coord.state import enqueue_drive_queue, list_drive_queue # noqa: PLC0415
|
|
177
193
|
|
|
194
|
+
existing_entries = entries_from_rows(list_drive_queue())
|
|
178
195
|
try:
|
|
179
196
|
after = parse_after_spec(after_specs, repo)
|
|
180
197
|
validate_config_repo(config_path, repo)
|
|
181
|
-
validate_hold_flags(hold_after, hold_reason, resume_when)
|
|
182
|
-
validate_enqueue(
|
|
198
|
+
validate_hold_flags(hold_after, hold_reason, resume_when, hold_scope)
|
|
199
|
+
validate_enqueue(existing_entries, repo, issue, after)
|
|
183
200
|
except QueueError as exc:
|
|
184
201
|
raise click.ClickException(str(exc)) from None
|
|
185
202
|
|
|
203
|
+
# #2186: the UPDATE path in `_enqueue_drive_queue_local` always writes
|
|
204
|
+
# whatever `hold_scope` THIS call passed (default `entry`) — so re-adding
|
|
205
|
+
# an already fleet-scoped gate without repeating `--scope fleet` silently
|
|
206
|
+
# narrows it. That fails toward the safer/narrower scope, not a
|
|
207
|
+
# correctness bug, but it is a real behaviour change an operator who only
|
|
208
|
+
# meant to touch `--machine`/`--after` would not expect, so it is echoed
|
|
209
|
+
# rather than left silent.
|
|
210
|
+
previous = next((e for e in existing_entries if e.key == entry_key(repo, issue)), None)
|
|
211
|
+
scope_downgrade_warning = ""
|
|
212
|
+
if (
|
|
213
|
+
previous is not None
|
|
214
|
+
and previous.hold_scope == HOLD_SCOPE_FLEET
|
|
215
|
+
and hold_after
|
|
216
|
+
and hold_scope != HOLD_SCOPE_FLEET
|
|
217
|
+
):
|
|
218
|
+
scope_downgrade_warning = (
|
|
219
|
+
f"\nwarning: {entry_key(repo, issue)} was scope=fleet — this add did not "
|
|
220
|
+
f"repeat --scope {HOLD_SCOPE_FLEET}, so its gate is now scope={hold_scope} "
|
|
221
|
+
"(entries-only). Pass --scope fleet again if the fleet-wide stop was still needed."
|
|
222
|
+
)
|
|
223
|
+
|
|
186
224
|
enqueue_drive_queue(
|
|
187
225
|
repo,
|
|
188
226
|
issue,
|
|
@@ -192,37 +230,51 @@ def drive_queue_add(
|
|
|
192
230
|
hold_after=hold_after,
|
|
193
231
|
hold_reason=hold_reason,
|
|
194
232
|
resume_when=resume_when,
|
|
233
|
+
hold_scope=hold_scope,
|
|
195
234
|
)
|
|
196
235
|
suffix = f" after {', '.join(after)}" if after else ""
|
|
197
236
|
pinned = f" on {machine}" if machine else ""
|
|
198
237
|
gate = ""
|
|
199
238
|
if hold_after:
|
|
200
239
|
gate = " · holds the queue when done"
|
|
240
|
+
if hold_scope == HOLD_SCOPE_FLEET:
|
|
241
|
+
gate += " (fleet-wide — nothing anywhere launches)"
|
|
201
242
|
if resume_when:
|
|
202
243
|
gate += f" (auto-resume when `{resume_when}` passes)"
|
|
203
|
-
click.echo(f"queued {entry_key(repo, issue)}{pinned}{suffix}{gate}")
|
|
244
|
+
click.echo(f"queued {entry_key(repo, issue)}{pinned}{suffix}{gate}{scope_downgrade_warning}")
|
|
204
245
|
|
|
205
246
|
|
|
206
|
-
def validate_hold_flags(
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
247
|
+
def validate_hold_flags(
|
|
248
|
+
hold_after: bool,
|
|
249
|
+
hold_reason: str,
|
|
250
|
+
resume_when: str,
|
|
251
|
+
hold_scope: str = HOLD_SCOPE_ENTRY,
|
|
252
|
+
) -> None:
|
|
253
|
+
"""Refuse gate detail without a gate (#1757, extended by #2186).
|
|
254
|
+
|
|
255
|
+
`--resume-when` / `--hold-reason` / a non-default `--scope` on an entry
|
|
256
|
+
with no `--hold-after` would be stored and then never read — a silent
|
|
257
|
+
no-op on the ONE flag whose whole job is to stop the queue (or narrow
|
|
258
|
+
what it stops). An operator who mistyped that has no signal at all that
|
|
259
|
+
overnight sequencing will now blow straight through the deploy step, so
|
|
260
|
+
this is a usage error, not a warning.
|
|
214
261
|
"""
|
|
215
262
|
if hold_after:
|
|
216
263
|
return
|
|
217
264
|
offenders = [
|
|
218
265
|
flag
|
|
219
|
-
for flag, value in (
|
|
266
|
+
for flag, value in (
|
|
267
|
+
("--resume-when", resume_when),
|
|
268
|
+
("--hold-reason", hold_reason),
|
|
269
|
+
)
|
|
220
270
|
if value
|
|
221
271
|
]
|
|
272
|
+
if hold_scope == HOLD_SCOPE_FLEET:
|
|
273
|
+
offenders.append("--scope=fleet")
|
|
222
274
|
if offenders:
|
|
223
275
|
raise QueueError(
|
|
224
276
|
f"{' and '.join(offenders)} require --hold-after "
|
|
225
|
-
"(without it there is no gate to resume or
|
|
277
|
+
"(without it there is no gate to resume, explain, or scope)"
|
|
226
278
|
)
|
|
227
279
|
|
|
228
280
|
|
|
@@ -277,6 +329,8 @@ def drive_queue_list(repo: str | None, output_json: bool, config_path: Path) ->
|
|
|
277
329
|
bits.append(f"deferrals={entry.deferrals}")
|
|
278
330
|
if entry.hold_after:
|
|
279
331
|
bits.append(f"hold={entry.hold_state or 'armed'}")
|
|
332
|
+
if entry.hold_scope == HOLD_SCOPE_FLEET:
|
|
333
|
+
bits.append("scope=fleet")
|
|
280
334
|
click.echo(" ".join(bits))
|
|
281
335
|
if entry.last_reason:
|
|
282
336
|
click.echo(f" last{_reason_age_suffix(entry, now)}: {entry.last_reason}")
|
|
@@ -325,7 +379,12 @@ def _hold_lines(entry: QueueEntry) -> list[str]:
|
|
|
325
379
|
"""
|
|
326
380
|
if not entry.hold_after:
|
|
327
381
|
return []
|
|
328
|
-
|
|
382
|
+
scope_suffix = (
|
|
383
|
+
" [fleet-wide — holds everything, not just this entry's dependents]"
|
|
384
|
+
if entry.hold_scope == HOLD_SCOPE_FLEET
|
|
385
|
+
else ""
|
|
386
|
+
)
|
|
387
|
+
lines = [f" hold-after: {entry.gate_reason}{scope_suffix}"]
|
|
329
388
|
if entry.resume_when:
|
|
330
389
|
probe = f" resume-when: {entry.resume_when}"
|
|
331
390
|
if entry.hold_probes:
|
|
@@ -416,6 +475,10 @@ def drive_queue_status(output_json: bool, config_path: Path) -> None:
|
|
|
416
475
|
"reason": e.gate_reason,
|
|
417
476
|
"resume_when": e.resume_when,
|
|
418
477
|
"probes": e.hold_probes,
|
|
478
|
+
# #2186: typed, so a client reads what this gate
|
|
479
|
+
# holds without parsing the `[fleet-wide ...]`
|
|
480
|
+
# suffix back out of the rendered text.
|
|
481
|
+
"scope": e.hold_scope,
|
|
419
482
|
}
|
|
420
483
|
for e in held
|
|
421
484
|
],
|
|
@@ -401,6 +401,13 @@ def _ensure_schema(conn: sqlite3.Connection) -> None:
|
|
|
401
401
|
hold_state TEXT NOT NULL DEFAULT '',
|
|
402
402
|
hold_probes INTEGER NOT NULL DEFAULT 0,
|
|
403
403
|
launch_host TEXT NOT NULL DEFAULT '',
|
|
404
|
+
-- #2186: how far a FIRED gate reaches. 'entry' (the default) holds
|
|
405
|
+
-- only entries whose own after_json names this row's key; 'fleet'
|
|
406
|
+
-- is the pre-#2186 whole-queue stop, kept for an explicit
|
|
407
|
+
-- --scope=fleet. NOT NULL DEFAULT 'entry' so a row written before
|
|
408
|
+
-- this column existed reads as the narrower scope, never a silent
|
|
409
|
+
-- fleet-wide one — see coord.drive_queue.QueueEntry.hold_scope.
|
|
410
|
+
hold_scope TEXT NOT NULL DEFAULT 'entry',
|
|
404
411
|
UNIQUE(repo_name, issue_number)
|
|
405
412
|
);
|
|
406
413
|
|
|
@@ -717,6 +724,13 @@ def _migrate_add_columns(conn: sqlite3.Connection) -> None:
|
|
|
717
724
|
# carries its age instead of rendering a stale snapshot as current
|
|
718
725
|
# state. NULL for every row predating this migration.
|
|
719
726
|
"ALTER TABLE drive_queue ADD COLUMN reason_at REAL",
|
|
727
|
+
# #2186: deploy-gate SCOPE — see the CREATE TABLE comment above and
|
|
728
|
+
# coord/drive_queue.py's HOLD_SCOPE_ENTRY/HOLD_SCOPE_FLEET. Every row
|
|
729
|
+
# predating this migration (and every armed-but-not-yet-fired gate)
|
|
730
|
+
# defaults to 'entry', the narrower reading — a fired gate on such a
|
|
731
|
+
# row holds only its own dependents rather than the whole queue, which
|
|
732
|
+
# is the #2186 fix itself, not just a schema detail.
|
|
733
|
+
"ALTER TABLE drive_queue ADD COLUMN hold_scope TEXT NOT NULL DEFAULT 'entry'",
|
|
720
734
|
]
|
|
721
735
|
for sql in migrations:
|
|
722
736
|
try:
|
|
@@ -755,6 +755,14 @@ def dispatch(
|
|
|
755
755
|
# field reject unknown payload keys with a 400.
|
|
756
756
|
if getattr(proposal, "resume_session_id", None):
|
|
757
757
|
payload["resume_session_id"] = proposal.resume_session_id
|
|
758
|
+
# #2188: the issue's GitHub labels, so the agent's own reap can see
|
|
759
|
+
# `coord.models.DELIVERABLE_ANALYSIS_LABEL` without a DB/GitHub round
|
|
760
|
+
# trip (config-free agent — docs/EPHEMERAL_WORKERS.md). Only sent when
|
|
761
|
+
# non-empty, same discipline as every optional wire field above — an
|
|
762
|
+
# agent predating `AssignmentSpec.issue_labels` 400s on an unrecognized
|
|
763
|
+
# kwarg.
|
|
764
|
+
if proposal.issue_labels:
|
|
765
|
+
payload["issue_labels"] = list(proposal.issue_labels)
|
|
758
766
|
# #2131: per-leg spend ceiling, resolved here (CLI/daemon lane) and
|
|
759
767
|
# carried on the wire so a config-free agent is covered too. Sent ONLY
|
|
760
768
|
# when the operator has actually configured one — with no `budget:` block
|
|
@@ -109,6 +109,7 @@ from coord.interactive import (
|
|
|
109
109
|
)
|
|
110
110
|
from coord.dead_end import DeadEnd, detect_dead_end
|
|
111
111
|
from coord.failure_class import classify_failure, plan_usage_limit_resume
|
|
112
|
+
from coord.models import DELIVERABLE_ANALYSIS_LABEL
|
|
112
113
|
from coord.usage_limits import PlanLimits, evaluate_usage_gate, get_plan_limits
|
|
113
114
|
# Lost in the #1584-onto-#1590 rebase: _decide_review() calls this, but the
|
|
114
115
|
# import lived in a hunk #1590 rewrote, so the merge came out textually clean
|
|
@@ -1397,6 +1398,32 @@ def decide(
|
|
|
1397
1398
|
f"{state.work_machine or machine}"
|
|
1398
1399
|
)
|
|
1399
1400
|
|
|
1401
|
+
# ---- analysis deliverable: done + 0 commits is the SUCCESS shape (#2188)
|
|
1402
|
+
#
|
|
1403
|
+
# An issue labelled `deliverable:analysis` inverts the read on a 0-commit
|
|
1404
|
+
# exit: the deliverable is the worker's own final message (already
|
|
1405
|
+
# posted to the issue by the coordinator — see coord.notify.
|
|
1406
|
+
# post_transition's EVENT_COMPLETION arm), not a diff. `coord.agent.
|
|
1407
|
+
# AgentServer._reap` only ever produces this shape on `status == "done"`
|
|
1408
|
+
# (never "advisory" — see `AgentAssignment.analysis_deliverable`), so
|
|
1409
|
+
# this only needs to guard the `done` arm above, and it runs BEFORE the
|
|
1410
|
+
# "no branch"/dead-end/Test/Review/Merge machinery below: none of that
|
|
1411
|
+
# applies when there is nothing to test, review, or merge. A labelled
|
|
1412
|
+
# issue whose worker DID push commits (the label describes the common
|
|
1413
|
+
# case, not a hard rule) falls through unchanged — `branch_has_commits`
|
|
1414
|
+
# is False only for the genuine 0-commit shape.
|
|
1415
|
+
if (
|
|
1416
|
+
state.work_status == "done"
|
|
1417
|
+
and DELIVERABLE_ANALYSIS_LABEL in state.issue_labels
|
|
1418
|
+
and (not state.work_branch or not verifier.branch_has_commits(state))
|
|
1419
|
+
):
|
|
1420
|
+
return _succeed(
|
|
1421
|
+
f"✓ ANALYSIS DELIVERABLE — {state.work_aid} completed with 0 "
|
|
1422
|
+
f"commits (issue labelled `{DELIVERABLE_ANALYSIS_LABEL}`); the "
|
|
1423
|
+
"worker's final message is the deliverable and was posted to "
|
|
1424
|
+
"the issue automatically — nothing to test, review, or merge."
|
|
1425
|
+
)
|
|
1426
|
+
|
|
1400
1427
|
# A 'done' row with no branch never pushed anything either.
|
|
1401
1428
|
if not state.work_branch:
|
|
1402
1429
|
return _die(
|