code-coordinator 0.5.60__tar.gz → 0.5.62__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.60/code_coordinator.egg-info → code_coordinator-0.5.62}/PKG-INFO +1 -1
- {code_coordinator-0.5.60 → code_coordinator-0.5.62/code_coordinator.egg-info}/PKG-INFO +1 -1
- code_coordinator-0.5.62/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/agent.py +89 -11
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/release.py +137 -26
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dispatch.py +8 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/drive.py +27 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/models.py +16 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/notify.py +18 -1
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/release_window.py +14 -1
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_zero_commit.py +166 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_release_window.py +264 -3
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_dispatch.py +35 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_drive.py +71 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_notify.py +60 -0
- code_coordinator-0.5.60/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/.gitignore +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/CLAUDE.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/GOAL.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/LICENSE +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/MANIFEST.in +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/README.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/__init__.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/audit.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/board_service.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/brain.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/claim.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/cli.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/client.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/comments.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/config.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dao.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/db.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/deps.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/events.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/filelock.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/freshness.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/gates.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/goal.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/context.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/models.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/render.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/health/units.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/hooks.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/interactive.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/network.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/openapi.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/parentage.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/plans.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/progress.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/reports.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/review.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/smoke.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/split_work.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/state.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/test_author.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/test_report.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/usage.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/install-agent.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/pyproject.toml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/setup.cfg +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/__init__.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/conftest.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_config.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_db.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_events.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_init.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_models.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_network.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_review.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_session.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_split.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_state.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.60 → code_coordinator-0.5.62}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -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 —
|
|
@@ -1877,9 +1877,82 @@ def _drain(
|
|
|
1877
1877
|
sleep_fn(max(0.0, min(poll_interval, deadline - elapsed)))
|
|
1878
1878
|
|
|
1879
1879
|
|
|
1880
|
+
def _parse_trailing_json(stdout: str) -> dict | None:
|
|
1881
|
+
"""The last top-level JSON object printed to *stdout*, or ``None``.
|
|
1882
|
+
|
|
1883
|
+
#2187: this used to look only at the LAST LINE of stdout and try to
|
|
1884
|
+
parse THAT LINE alone as JSON. `coord release propagate --json` (like
|
|
1885
|
+
every ``--json`` command in this codebase) prints its record via
|
|
1886
|
+
``json.dumps(..., indent=2, ...)`` — pretty-printed, for a human running
|
|
1887
|
+
it by hand — which means the payload spans many lines and its own last
|
|
1888
|
+
line is just ``}``, never a complete object on its own. The old check
|
|
1889
|
+
therefore never found the record for ANY propagate run, successful or
|
|
1890
|
+
not, and every call fell back to the ``f"exit {code}"`` placeholder in
|
|
1891
|
+
`_run_propagate` below — which is exactly the false "propagate-failed
|
|
1892
|
+
(status=exit 0, exit=0)" #2187 reports for a verified, exit-0 roll.
|
|
1893
|
+
|
|
1894
|
+
This instead finds the LAST line that is the object's own unindented
|
|
1895
|
+
``{`` (json.dumps never indents the outermost brace) and parses
|
|
1896
|
+
everything from there to the end of stdout as one document. A single
|
|
1897
|
+
compact line (no ``indent=``) still works too, tried second.
|
|
1898
|
+
"""
|
|
1899
|
+
import json as _json # noqa: PLC0415
|
|
1900
|
+
|
|
1901
|
+
text = stdout.strip()
|
|
1902
|
+
if not text:
|
|
1903
|
+
return None
|
|
1904
|
+
lines = text.splitlines()
|
|
1905
|
+
for idx in range(len(lines) - 1, -1, -1):
|
|
1906
|
+
if lines[idx].strip() != "{":
|
|
1907
|
+
continue
|
|
1908
|
+
try:
|
|
1909
|
+
payload = _json.loads("\n".join(lines[idx:]))
|
|
1910
|
+
except ValueError:
|
|
1911
|
+
continue
|
|
1912
|
+
if isinstance(payload, dict):
|
|
1913
|
+
return payload
|
|
1914
|
+
for line in reversed(lines):
|
|
1915
|
+
line = line.strip()
|
|
1916
|
+
if not line.startswith("{"):
|
|
1917
|
+
continue
|
|
1918
|
+
try:
|
|
1919
|
+
payload = _json.loads(line)
|
|
1920
|
+
except ValueError:
|
|
1921
|
+
continue
|
|
1922
|
+
if isinstance(payload, dict):
|
|
1923
|
+
return payload
|
|
1924
|
+
return None
|
|
1925
|
+
|
|
1926
|
+
|
|
1927
|
+
def _latest_propagate_record_since(state_dir: Path, since: float) -> dict | None:
|
|
1928
|
+
"""The propagation journal's own record for the run started at/after
|
|
1929
|
+
*since*, if any — the ground truth `coord release history` itself reads.
|
|
1930
|
+
|
|
1931
|
+
#2187 proposal 1: "read `coord release history` for the run it just
|
|
1932
|
+
launched rather than inferring from a side-channel [stdout]." The
|
|
1933
|
+
journal has no request id to join on, so this uses ``started_at``: the
|
|
1934
|
+
subprocess `_run_propagate` shells out to is synchronous, so by the
|
|
1935
|
+
time it has returned, a successful run has already appended its record
|
|
1936
|
+
with a ``started_at`` at or after the moment this function's caller
|
|
1937
|
+
launched it. Picks the OLDEST such record — the first thing written
|
|
1938
|
+
after launch — in case some unrelated `coord release propagate` run
|
|
1939
|
+
elsewhere raced it onto the same shared journal.
|
|
1940
|
+
"""
|
|
1941
|
+
from coord import release_propagate as rp # noqa: PLC0415
|
|
1942
|
+
|
|
1943
|
+
candidates = [
|
|
1944
|
+
rec for rec in rp.read_records(state_dir)
|
|
1945
|
+
if isinstance(rec.get("started_at"), (int, float)) and rec["started_at"] >= since
|
|
1946
|
+
]
|
|
1947
|
+
if not candidates:
|
|
1948
|
+
return None
|
|
1949
|
+
return min(candidates, key=lambda rec: rec["started_at"])
|
|
1950
|
+
|
|
1951
|
+
|
|
1880
1952
|
def _run_propagate(
|
|
1881
|
-
*, daemon_host: str, target_version: str, config_path: Path,
|
|
1882
|
-
|
|
1953
|
+
*, daemon_host: str, target_version: str, config_path: Path, state_dir: Path,
|
|
1954
|
+
runner=None, now_fn=None,
|
|
1955
|
+
) -> tuple[str, int, str, float | None]:
|
|
1883
1956
|
"""``coord release propagate --daemon-host ... --target ... --json``.
|
|
1884
1957
|
|
|
1885
1958
|
A real subprocess of THIS interpreter (matches `_roll_tui`/
|
|
@@ -1890,15 +1963,26 @@ def _run_propagate(
|
|
|
1890
1963
|
run decided was needed is the version that actually rolls, even if a new
|
|
1891
1964
|
release lands on PyPI mid-drain.
|
|
1892
1965
|
|
|
1893
|
-
Returns ``(status, exit_code, combined_output)``.
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1966
|
+
Returns ``(status, exit_code, combined_output, propagate_started_at)``.
|
|
1967
|
+
``status`` is read from the propagation journal entry that run itself
|
|
1968
|
+
wrote (:func:`_latest_propagate_record_since`) — the same ground truth
|
|
1969
|
+
`coord release history` reads — not reparsed from stdout (#2187:
|
|
1970
|
+
reparsing stdout was the false-negative bug). ``propagate_started_at``
|
|
1971
|
+
is that record's own ``started_at``, stamped onto the window's own
|
|
1972
|
+
record so `window-history` can be joined to `history` (#2187 proposal
|
|
1973
|
+
2) instead of the two stores re-deciding the same outcome separately.
|
|
1974
|
+
Only when no journal entry can be found — the subprocess died before
|
|
1975
|
+
writing one, or the journal write itself failed — does this fall back
|
|
1976
|
+
to `_parse_trailing_json` on stdout, and then to ``f"exit {code}"``;
|
|
1977
|
+
either fallback returns ``None`` for ``propagate_started_at`` since
|
|
1978
|
+
there is then nothing to join to.
|
|
1897
1979
|
"""
|
|
1898
|
-
import json as _json # noqa: PLC0415
|
|
1899
1980
|
import subprocess # noqa: PLC0415
|
|
1981
|
+
import time # noqa: PLC0415
|
|
1900
1982
|
|
|
1901
1983
|
run = runner or subprocess.run
|
|
1984
|
+
clock = now_fn or time.time
|
|
1985
|
+
launched_at = clock()
|
|
1902
1986
|
argv = [
|
|
1903
1987
|
sys.executable, "-m", "coord.cli", "release", "propagate",
|
|
1904
1988
|
"--daemon-host", daemon_host, "--target", target_version,
|
|
@@ -1908,23 +1992,22 @@ def _run_propagate(
|
|
|
1908
1992
|
proc = run(argv, capture_output=True, text=True, timeout=1800)
|
|
1909
1993
|
except Exception as exc: # noqa: BLE001
|
|
1910
1994
|
detail = f"{type(exc).__name__}: {exc}"
|
|
1911
|
-
return f"error: {detail}", 1, detail
|
|
1995
|
+
return f"error: {detail}", 1, detail, None
|
|
1912
1996
|
code = getattr(proc, "returncode", 1)
|
|
1913
1997
|
stdout = getattr(proc, "stdout", "") or ""
|
|
1914
1998
|
stderr = getattr(proc, "stderr", "") or ""
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
|
|
1921
|
-
|
|
1922
|
-
|
|
1923
|
-
|
|
1924
|
-
if
|
|
1925
|
-
|
|
1926
|
-
|
|
1927
|
-
return status, code, (stdout + ("\n" + stderr if stderr else "")).strip()
|
|
1999
|
+
output = (stdout + ("\n" + stderr if stderr else "")).strip()
|
|
2000
|
+
|
|
2001
|
+
record = _latest_propagate_record_since(state_dir, launched_at)
|
|
2002
|
+
if record is not None:
|
|
2003
|
+
status = str(record.get("status") or f"exit {code}")
|
|
2004
|
+
return status, code, output, record.get("started_at")
|
|
2005
|
+
|
|
2006
|
+
payload = _parse_trailing_json(stdout)
|
|
2007
|
+
status = (
|
|
2008
|
+
str(payload["status"]) if payload and payload.get("status") else f"exit {code}"
|
|
2009
|
+
)
|
|
2010
|
+
return status, code, output, None
|
|
1928
2011
|
|
|
1929
2012
|
|
|
1930
2013
|
#: Where a skipped/failed nightly window (trap 3) is recorded — same
|
|
@@ -2161,13 +2244,14 @@ def release_nightly_window( # noqa: PLR0912, PLR0915 — a pipeline; see module
|
|
|
2161
2244
|
status = rw.STATUS_DRAIN_TIMEOUT
|
|
2162
2245
|
else:
|
|
2163
2246
|
# ── 5. roll — the daemon host is now provably free ─────────
|
|
2164
|
-
prop_status, prop_exit, prop_output = _run_propagate(
|
|
2247
|
+
prop_status, prop_exit, prop_output, prop_started_at = _run_propagate(
|
|
2165
2248
|
daemon_host=daemon_name, target_version=record.target_version,
|
|
2166
|
-
config_path=config_path,
|
|
2249
|
+
config_path=config_path, state_dir=state_dir,
|
|
2167
2250
|
)
|
|
2168
2251
|
record.propagate_status = prop_status
|
|
2169
2252
|
record.propagate_exit_code = prop_exit
|
|
2170
2253
|
record.propagate_output = prop_output
|
|
2254
|
+
record.propagate_started_at = prop_started_at
|
|
2171
2255
|
if prop_output:
|
|
2172
2256
|
click.echo(prop_output)
|
|
2173
2257
|
|
|
@@ -2193,11 +2277,38 @@ def release_nightly_window( # noqa: PLR0912, PLR0915 — a pipeline; see module
|
|
|
2193
2277
|
click.echo(f"error: {record.error}", err=True)
|
|
2194
2278
|
_escalate_window(record, reason=record.error)
|
|
2195
2279
|
status = rw.STATUS_PROPAGATE_DEFERRED
|
|
2280
|
+
elif prop_status.startswith("exit ") or prop_status.startswith("error:"):
|
|
2281
|
+
# #2187 proposal 3: this arm is reached only when NEITHER
|
|
2282
|
+
# ground truth was available — no matching entry in
|
|
2283
|
+
# `coord release history` (see
|
|
2284
|
+
# `_latest_propagate_record_since`) AND no parseable
|
|
2285
|
+
# `--json` payload on stdout (`_parse_trailing_json`).
|
|
2286
|
+
# `prop_status` here is one of those two functions'
|
|
2287
|
+
# placeholder fallbacks, never a real outcome — so the
|
|
2288
|
+
# message must say exactly what evidence is missing
|
|
2289
|
+
# instead of quoting the placeholder as if it were one
|
|
2290
|
+
# (the old text, "status=exit 0, exit=0", read as a
|
|
2291
|
+
# verification failure when exit 0 is what a VERIFIED
|
|
2292
|
+
# roll also produces).
|
|
2293
|
+
record.error = (
|
|
2294
|
+
f"coord release propagate exited {prop_exit}, but its "
|
|
2295
|
+
"outcome could not be confirmed: no matching entry "
|
|
2296
|
+
"was found in `coord release history` for this run, "
|
|
2297
|
+
"and its --json stdout had no parseable status "
|
|
2298
|
+
"either — see propagate_output"
|
|
2299
|
+
)
|
|
2300
|
+
click.echo(f"error: {record.error}", err=True)
|
|
2301
|
+
_escalate_window(record, reason=record.error)
|
|
2302
|
+
status = rw.STATUS_PROPAGATE_FAILED
|
|
2303
|
+
exit_code = prop_exit or 1
|
|
2196
2304
|
else:
|
|
2305
|
+
# A real, ground-truth status from `coord release
|
|
2306
|
+
# history` — just not a verified roll (e.g. `failed` or
|
|
2307
|
+
# `rolled-back`).
|
|
2197
2308
|
record.error = (
|
|
2198
|
-
f"coord release propagate did not verify a roll "
|
|
2199
|
-
f"
|
|
2200
|
-
f"
|
|
2309
|
+
f"coord release propagate did not verify a roll — "
|
|
2310
|
+
f"`coord release history` recorded status="
|
|
2311
|
+
f"{prop_status!r} (exit {prop_exit}) for this run"
|
|
2201
2312
|
)
|
|
2202
2313
|
click.echo(f"error: {record.error}", err=True)
|
|
2203
2314
|
_escalate_window(record, reason=record.error)
|
|
@@ -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(
|
|
@@ -354,6 +354,22 @@ def test_mode_from_labels(labels) -> str | None:
|
|
|
354
354
|
return None
|
|
355
355
|
|
|
356
356
|
|
|
357
|
+
# #2188: the per-issue DELIVERABLE policy label — mirrors `TEST_MODE_*_LABEL`'s
|
|
358
|
+
# shape (cheapest fit, no body parsing). An issue whose deliverable is a
|
|
359
|
+
# written artifact (a diagnosis, an audit, a spike/investigation writeup)
|
|
360
|
+
# rather than a diff cannot succeed in the default pipeline: a worker that
|
|
361
|
+
# does exactly what was asked ends with 0 commits by design, which the reap
|
|
362
|
+
# otherwise reads as the #448 "worker did nothing" ADVISORY and `coord drive`
|
|
363
|
+
# gives up on — discarding the whole deliverable (#2188's own worked example,
|
|
364
|
+
# #2132, lost $1.65 of correct, on-topic analysis this way). Labelling the
|
|
365
|
+
# issue `deliverable:analysis` inverts that reading: a clean exit with 0
|
|
366
|
+
# commits is `coord.agent.AgentServer._reap`'s SUCCESS condition for this
|
|
367
|
+
# issue, not its anomaly — see `_ZERO_COMMIT_TYPES`/`AgentAssignment.
|
|
368
|
+
# analysis_deliverable` in coord/agent.py and the `decide()` short-circuit in
|
|
369
|
+
# coord/drive.py that skips Test/Review/Merge for it.
|
|
370
|
+
DELIVERABLE_ANALYSIS_LABEL = "deliverable:analysis"
|
|
371
|
+
|
|
372
|
+
|
|
357
373
|
@dataclass
|
|
358
374
|
class Assignment:
|
|
359
375
|
machine_name: str
|
|
@@ -2470,7 +2470,24 @@ def post_transition(transition: Transition, record: dict, entry: dict) -> None:
|
|
|
2470
2470
|
failure_reason=_failure_reason,
|
|
2471
2471
|
)
|
|
2472
2472
|
elif transition.event == EVENT_COMPLETION:
|
|
2473
|
-
|
|
2473
|
+
# #2188: a `deliverable:analysis` issue that legitimately ended with
|
|
2474
|
+
# 0 commits has no diff to point at — the deliverable IS the
|
|
2475
|
+
# worker's own final message (`AgentAssignment.result_text`, see
|
|
2476
|
+
# `coord.agent.AgentServer._reap`). Post it as the completion
|
|
2477
|
+
# comment's summary so it reaches the issue automatically; the
|
|
2478
|
+
# worker itself has no `gh` access to post it. Every other
|
|
2479
|
+
# completion (the overwhelming majority) is unaffected — `entry.get
|
|
2480
|
+
# ("analysis_deliverable")` is only ever truthy for this one shape.
|
|
2481
|
+
_analysis_summary = (
|
|
2482
|
+
entry.get("result_text") or ""
|
|
2483
|
+
if entry.get("analysis_deliverable")
|
|
2484
|
+
else ""
|
|
2485
|
+
)
|
|
2486
|
+
post_completion(
|
|
2487
|
+
exit_code=transition.exit_code or 0,
|
|
2488
|
+
summary=_analysis_summary,
|
|
2489
|
+
**common,
|
|
2490
|
+
)
|
|
2474
2491
|
mark_notified(
|
|
2475
2492
|
transition.assignment_id,
|
|
2476
2493
|
transition.event,
|
|
@@ -190,6 +190,14 @@ class WindowRecord:
|
|
|
190
190
|
propagate_status: str | None = None
|
|
191
191
|
propagate_exit_code: int | None = None
|
|
192
192
|
propagate_output: str = ""
|
|
193
|
+
#: The propagation journal record's OWN ``started_at`` — the join key
|
|
194
|
+
#: (#2187 proposal 2) that lets `window-history` be correlated to
|
|
195
|
+
#: `coord release history` for the SAME run, instead of each store
|
|
196
|
+
#: independently re-deciding what happened. ``None`` when no matching
|
|
197
|
+
#: journal record could be found (see
|
|
198
|
+
#: `coord.commands.release._latest_propagate_record_since`) — there is
|
|
199
|
+
#: then nothing to join to.
|
|
200
|
+
propagate_started_at: float | None = None
|
|
193
201
|
finished_at: float | None = None
|
|
194
202
|
error: str | None = None
|
|
195
203
|
dry_run: bool = False
|
|
@@ -327,9 +335,14 @@ def render_record(record: WindowRecord | Mapping[str, Any]) -> list[str]:
|
|
|
327
335
|
if data.get("drain_detail"):
|
|
328
336
|
lines.append(f" {data['drain_detail']}")
|
|
329
337
|
if data.get("propagate_status"):
|
|
338
|
+
joined = (
|
|
339
|
+
f" [history @ {_stamp(data['propagate_started_at'])}]"
|
|
340
|
+
if data.get("propagate_started_at")
|
|
341
|
+
else ""
|
|
342
|
+
)
|
|
330
343
|
lines.append(
|
|
331
344
|
f" propagate: {data['propagate_status']} "
|
|
332
|
-
f"(exit {data.get('propagate_exit_code')})"
|
|
345
|
+
f"(exit {data.get('propagate_exit_code')}){joined}"
|
|
333
346
|
)
|
|
334
347
|
if data.get("queue_restarted") is not None:
|
|
335
348
|
lines.append(
|