code-coordinator 0.5.128__tar.gz → 0.5.130__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.128 → code_coordinator-0.5.130}/PKG-INFO +1 -1
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/agent.py +90 -3
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/milestone.py +99 -57
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/milestone_dispatch.py +75 -1
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/serve_app.py +5 -2
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/ARCHITECTURE.md +1 -1
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_push_failure.py +186 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_dispatch.py +81 -38
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_milestone_dispatch.py +41 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/.gitignore +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/CLAUDE.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/GOAL.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/LICENSE +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/MANIFEST.in +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/README.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/__init__.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/audit.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/block_log.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/board_service.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/brain.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/claim.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/cli.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/client.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/comments.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/config.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dao.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/db.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/deps.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/drive.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/events.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/filelock.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/freshness.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/gates.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/goal.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/context.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/models.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/render.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/health/units.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/hooks.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/interactive.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/models.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/network.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/notify.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/openapi.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/parentage.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/plans.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/progress.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/release_window.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/reports.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/review.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/smoke.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/split_work.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/state.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/test_author.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/test_report.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/usage.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/install-agent.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/pyproject.toml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/setup.cfg +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/__init__.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/conftest.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_config.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_db.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_events.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_init.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_models.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_network.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_session.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_split.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_state.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.128 → code_coordinator-0.5.130}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -785,6 +785,44 @@ def _git(cwd: Path, *args: str, timeout: float = 15.0) -> str:
|
|
|
785
785
|
return result.stdout.strip()
|
|
786
786
|
|
|
787
787
|
|
|
788
|
+
def _remote_already_has_head(
|
|
789
|
+
wt_path: Path, remote: str, branch: str, *, timeout: float = 30.0
|
|
790
|
+
) -> bool:
|
|
791
|
+
"""True when *remote*'s copy of *branch* already contains the worktree's
|
|
792
|
+
current ``HEAD`` as an ancestor (#2356).
|
|
793
|
+
|
|
794
|
+
Used by `_reap`'s belt-and-suspenders push-failure handling: an
|
|
795
|
+
auth-shaped failure pushing to *remote* does NOT necessarily mean the
|
|
796
|
+
worker's commits never reached it — a worker that hit the same broken
|
|
797
|
+
write-credential wall (e.g. an HTTPS credential helper with nothing to
|
|
798
|
+
expand in a non-interactive shell) may have already worked around it by
|
|
799
|
+
pushing the same commit over a different remote/protocol, most commonly
|
|
800
|
+
an explicit ``git@github.com:...`` SSH URL (the #2269 incident). That
|
|
801
|
+
push landed on the SAME GitHub-hosted branch this function now checks —
|
|
802
|
+
it never touches a second remote name in the worktree's own git config.
|
|
803
|
+
|
|
804
|
+
Fetching *branch* is a READ operation (``git fetch`` invokes
|
|
805
|
+
upload-pack, not receive-pack), which commonly still succeeds — via
|
|
806
|
+
anonymous access on a public repo, or a still-valid read-scoped
|
|
807
|
+
credential — even when the WRITE credential that just failed the push
|
|
808
|
+
is broken or missing entirely. So this is a meaningfully independent
|
|
809
|
+
signal from the push that just failed, not a re-run of the same failing
|
|
810
|
+
operation.
|
|
811
|
+
|
|
812
|
+
Returns ``False`` — never raises — on any git failure: the branch
|
|
813
|
+
missing on the remote, a network error, or `merge-base` reporting "not
|
|
814
|
+
an ancestor" all resolve to "unknown/genuinely behind", and an unknown
|
|
815
|
+
remote state must never suppress the real #1797 failure signal (nothing
|
|
816
|
+
ever reached the remote).
|
|
817
|
+
"""
|
|
818
|
+
try:
|
|
819
|
+
_git(wt_path, "fetch", remote, branch, timeout=timeout)
|
|
820
|
+
_git(wt_path, "merge-base", "--is-ancestor", "HEAD", "FETCH_HEAD")
|
|
821
|
+
return True
|
|
822
|
+
except (_GitError, subprocess.TimeoutExpired):
|
|
823
|
+
return False
|
|
824
|
+
|
|
825
|
+
|
|
788
826
|
def _is_linked_worktree(repo_path: Path) -> bool:
|
|
789
827
|
"""True when *repo_path* is a linked ``git worktree`` rather than the
|
|
790
828
|
checkout that owns its ``.git`` directory (#1729, H-6's guard 2).
|
|
@@ -2988,7 +3026,14 @@ class AgentAssignment:
|
|
|
2988
3026
|
# alongside `status == FAILED`; `None` on every other outcome —
|
|
2989
3027
|
# including a push failure for an unrelated reason (no `origin`
|
|
2990
3028
|
# configured, network blip), which stays non-fatal exactly as before
|
|
2991
|
-
# this field was introduced
|
|
3029
|
+
# this field was introduced, AND (#2356) including an auth-shaped
|
|
3030
|
+
# failure on THIS push that turns out to be superseded: when
|
|
3031
|
+
# `_remote_already_has_head` confirms the content already reached
|
|
3032
|
+
# `origin` via some other remote/protocol (e.g. the #2269 SSH-
|
|
3033
|
+
# workaround case), the push failure is logged but this field stays
|
|
3034
|
+
# `None` and the assignment keeps its normal (non-FAILED) outcome —
|
|
3035
|
+
# the work is where it needs to be, so the failed push here is a
|
|
3036
|
+
# non-event, not a signal.
|
|
2992
3037
|
#
|
|
2993
3038
|
# Exists to keep an auth break from being silently absorbed into either
|
|
2994
3039
|
# DONE (worker had local commits that never reached origin) or the
|
|
@@ -8146,12 +8191,54 @@ class AgentServer:
|
|
|
8146
8191
|
# against repos with no `origin` at all (every test
|
|
8147
8192
|
# fixture, and any local-only deployment), and that
|
|
8148
8193
|
# failure mode must stay non-fatal exactly as before.
|
|
8194
|
+
#
|
|
8195
|
+
# #2356: an auth-shaped failure on THIS push doesn't
|
|
8196
|
+
# necessarily mean the content never reached origin
|
|
8197
|
+
# — a worker that hit the same broken-credential
|
|
8198
|
+
# wall may have already landed the same commit via
|
|
8199
|
+
# an alternate remote/protocol (#2269: an explicit
|
|
8200
|
+
# SSH URL, worked around a missing HTTPS
|
|
8201
|
+
# credential). Before promoting to FAILED, check
|
|
8202
|
+
# whether origin already has local HEAD as an
|
|
8203
|
+
# ancestor (`_remote_already_has_head` fetches — a
|
|
8204
|
+
# read, which commonly still works even when the
|
|
8205
|
+
# write credential just failed). Only genuinely
|
|
8206
|
+
# missing content — origin behind local HEAD, or the
|
|
8207
|
+
# check itself failing — is promoted, so #1797's
|
|
8208
|
+
# original "nothing ever reached origin" case is
|
|
8209
|
+
# unaffected.
|
|
8149
8210
|
_reason = str(e)
|
|
8211
|
+
_suppressed_as_already_pushed = False
|
|
8150
8212
|
if _is_auth_push_failure(_reason):
|
|
8151
|
-
|
|
8213
|
+
_branch_for_check = (
|
|
8214
|
+
head if head and head != "HEAD" else None
|
|
8215
|
+
)
|
|
8216
|
+
if _branch_for_check and _remote_already_has_head(
|
|
8217
|
+
wt_path, "origin", _branch_for_check
|
|
8218
|
+
):
|
|
8219
|
+
_suppressed_as_already_pushed = True
|
|
8220
|
+
else:
|
|
8221
|
+
_push_failure_reason = _reason
|
|
8152
8222
|
try:
|
|
8153
8223
|
with open(assignment.log_path, "a") as reopen:
|
|
8154
|
-
|
|
8224
|
+
if _suppressed_as_already_pushed:
|
|
8225
|
+
# Deliberately NOT the generic "push
|
|
8226
|
+
# failed" line below: that line reads as
|
|
8227
|
+
# a live failure signal, which this
|
|
8228
|
+
# isn't — origin already has HEAD, so
|
|
8229
|
+
# the failed push here is a non-event
|
|
8230
|
+
# (#2356).
|
|
8231
|
+
reopen.write(
|
|
8232
|
+
"# reap: push failed but origin "
|
|
8233
|
+
"already has HEAD as an ancestor "
|
|
8234
|
+
"(pushed via another remote/"
|
|
8235
|
+
"protocol?) — treating as success "
|
|
8236
|
+
f"({_reason}) (#2356)\n"
|
|
8237
|
+
)
|
|
8238
|
+
else:
|
|
8239
|
+
reopen.write(
|
|
8240
|
+
f"# reap: push failed ({_reason})\n"
|
|
8241
|
+
)
|
|
8155
8242
|
except OSError:
|
|
8156
8243
|
pass
|
|
8157
8244
|
|
|
@@ -3,10 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
Thin CLI glue around ``coord/milestone_order.py`` (the pure DAG/frontier
|
|
5
5
|
parser) and ``coord/milestone_dispatch.py`` (Phase 1's machine-picking +
|
|
6
|
-
dispatch
|
|
7
|
-
terminal state from GitHub via
|
|
8
|
-
fetch_milestone_context`` (shared by both
|
|
9
|
-
inputs), then hands that data to the pure
|
|
6
|
+
dispatch, and #2335's work-order -> drive-queue translation): fetches the
|
|
7
|
+
tracking issue + milestone membership + issue terminal state from GitHub via
|
|
8
|
+
``coord.milestone_dispatch.fetch_milestone_context`` (shared by both
|
|
9
|
+
subcommands so they see identical inputs), then hands that data to the pure
|
|
10
|
+
functions and prints the result.
|
|
10
11
|
"""
|
|
11
12
|
|
|
12
13
|
from __future__ import annotations
|
|
@@ -21,7 +22,6 @@ import httpx
|
|
|
21
22
|
from coord.commands._common import _CONFIG_OPTION, _load_config
|
|
22
23
|
from coord.milestone_dispatch import (
|
|
23
24
|
DispatchOutcome,
|
|
24
|
-
MachinePick,
|
|
25
25
|
MilestoneDispatchError,
|
|
26
26
|
dispatch_entry,
|
|
27
27
|
fetch_milestone_context,
|
|
@@ -29,6 +29,7 @@ from coord.milestone_dispatch import (
|
|
|
29
29
|
is_milestone_complete,
|
|
30
30
|
pick_machine,
|
|
31
31
|
plan_dispatch,
|
|
32
|
+
plan_queue,
|
|
32
33
|
)
|
|
33
34
|
from coord.milestone_order import (
|
|
34
35
|
TRACKING_ISSUE_LABEL,
|
|
@@ -859,11 +860,6 @@ def milestone_order_cmd(repo: str, tracking_issue: int, config_path: Path) -> No
|
|
|
859
860
|
click.echo(f" #{b.issue_number}: {b.reason}")
|
|
860
861
|
|
|
861
862
|
|
|
862
|
-
def _echo_pick(pick: MachinePick) -> None:
|
|
863
|
-
suffix = f" (group {pick.entry.group})" if pick.entry.group else ""
|
|
864
|
-
click.echo(f" #{pick.entry.issue_number} -> {pick.machine.name}{suffix}")
|
|
865
|
-
|
|
866
|
-
|
|
867
863
|
def _echo_outcome(outcome: DispatchOutcome) -> None:
|
|
868
864
|
if outcome.ok:
|
|
869
865
|
click.echo(
|
|
@@ -883,13 +879,18 @@ def _echo_outcome(outcome: DispatchOutcome) -> None:
|
|
|
883
879
|
@milestone_group.command(
|
|
884
880
|
"dispatch",
|
|
885
881
|
help=(
|
|
886
|
-
"Promote a milestone into the pipeline:
|
|
887
|
-
"
|
|
888
|
-
"
|
|
889
|
-
"
|
|
890
|
-
"
|
|
891
|
-
"
|
|
892
|
-
"
|
|
882
|
+
"Promote a milestone into the pipeline: derive the dependency order "
|
|
883
|
+
"from the `## Work order` DAG and queue every still-open issue into "
|
|
884
|
+
"the drive-queue (`coord drive-queue add --after ...`) in that order "
|
|
885
|
+
"(#2335) — the DQ-4 tick then launches each issue as its pre-reqs "
|
|
886
|
+
"land, with #2247 file-overlap prediction, durable board-backed "
|
|
887
|
+
"state, and `coord drive-queue list/status` observability. `--next` "
|
|
888
|
+
"keeps the lighter direct single-dispatch path. REPO is the local "
|
|
889
|
+
"repo name from coordinator.yml; TRACKING_ISSUE is the GH issue "
|
|
890
|
+
"number of the tracking issue (its body holds the `## Work order` "
|
|
891
|
+
"block). This is the single explicit approval for the whole declared "
|
|
892
|
+
"work order — it does not expand scope beyond what `## Work order` "
|
|
893
|
+
"lists."
|
|
893
894
|
),
|
|
894
895
|
)
|
|
895
896
|
@click.argument("repo")
|
|
@@ -902,8 +903,9 @@ def _echo_outcome(outcome: DispatchOutcome) -> None:
|
|
|
902
903
|
"--next", "next_", is_flag=True,
|
|
903
904
|
help=(
|
|
904
905
|
"Single-pick mode: show up to 3 ready-frontier items and dispatch "
|
|
905
|
-
"only the one you choose
|
|
906
|
-
"
|
|
906
|
+
"only the one you choose — directly, not via the drive-queue. "
|
|
907
|
+
"Lighter-weight than bulk mode's whole-DAG drive-queue enqueue "
|
|
908
|
+
"(#2335)."
|
|
907
909
|
),
|
|
908
910
|
)
|
|
909
911
|
@click.option(
|
|
@@ -1003,14 +1005,15 @@ def milestone_dispatch_cmd(
|
|
|
1003
1005
|
click.echo(f"#{tracking_issue}: no `## Work order` block found")
|
|
1004
1006
|
return
|
|
1005
1007
|
|
|
1006
|
-
board = board_service.read_board()
|
|
1007
|
-
plan = plan_dispatch(ctx.work_order, board, cfg, repo_entry, ctx.terminal_issues)
|
|
1008
|
-
|
|
1009
1008
|
click.echo(
|
|
1010
1009
|
f"Work order for #{tracking_issue} (milestone #{ctx.milestone_number}):"
|
|
1011
1010
|
)
|
|
1012
1011
|
|
|
1013
1012
|
if next_:
|
|
1013
|
+
board = board_service.read_board()
|
|
1014
|
+
plan = plan_dispatch(
|
|
1015
|
+
ctx.work_order, board, cfg, repo_entry, ctx.terminal_issues
|
|
1016
|
+
)
|
|
1014
1017
|
if not plan.to_dispatch:
|
|
1015
1018
|
click.echo("No ready frontier item can dispatch right now.")
|
|
1016
1019
|
if plan.skipped:
|
|
@@ -1075,54 +1078,93 @@ def milestone_dispatch_cmd(
|
|
|
1075
1078
|
sys.exit(1)
|
|
1076
1079
|
return
|
|
1077
1080
|
|
|
1078
|
-
# Bulk mode:
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1081
|
+
# Bulk mode (#2335): queue the whole declared work order into the
|
|
1082
|
+
# drive-queue rather than dispatching the ready frontier directly. Before
|
|
1083
|
+
# #2335 this path called `dispatch_entry` per frontier pick and registered
|
|
1084
|
+
# the milestone for daemon auto-drain — bypassing the drive-queue
|
|
1085
|
+
# entirely: no #2247 overlap prediction, no durable queue entry surviving
|
|
1086
|
+
# a coordinator restart, nothing in `coord drive-queue list/status`. The
|
|
1087
|
+
# queue's `after=` edges now carry the DAG, so the DQ-4 tick launches each
|
|
1088
|
+
# issue as its pre-reqs land; that also makes `register_milestone_drain`
|
|
1089
|
+
# redundant here (the queue IS the durable drain, and registering would
|
|
1090
|
+
# have the daemon's direct-dispatch drain racing it).
|
|
1091
|
+
queue_plan = plan_queue(ctx.work_order, ctx.terminal_issues, repo_entry.name)
|
|
1092
|
+
|
|
1093
|
+
if not queue_plan:
|
|
1094
|
+
click.echo("Nothing to queue — every work-order node is already closed.")
|
|
1095
|
+
return
|
|
1091
1096
|
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
+
click.echo("Will queue (drive-queue), in dependency order:")
|
|
1098
|
+
for qe in queue_plan:
|
|
1099
|
+
bits = []
|
|
1100
|
+
if qe.group:
|
|
1101
|
+
bits.append(f"group {qe.group}")
|
|
1102
|
+
if qe.after:
|
|
1103
|
+
bits.append("after " + ", ".join(qe.after))
|
|
1104
|
+
suffix = f" ({'; '.join(bits)})" if bits else ""
|
|
1105
|
+
click.echo(f" #{qe.issue_number}{suffix}")
|
|
1097
1106
|
|
|
1098
1107
|
if dry_run:
|
|
1099
1108
|
click.echo()
|
|
1100
|
-
click.echo("(dry run —
|
|
1109
|
+
click.echo("(dry run — nothing queued)")
|
|
1101
1110
|
return
|
|
1102
1111
|
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1112
|
+
# Reuse `coord drive-queue add`'s own helpers so a milestone enqueue is
|
|
1113
|
+
# byte-identical to N manual `add` calls: same pre-write validation, same
|
|
1114
|
+
# #2247 overlap prediction (auto-`after` edges recorded to the audit log),
|
|
1115
|
+
# same upsert semantics for an issue already queued.
|
|
1116
|
+
from coord.commands.drive_queue import ( # noqa: PLC0415
|
|
1117
|
+
_applicable_auto_after,
|
|
1118
|
+
_predict_overlap,
|
|
1119
|
+
_record_overlap_prediction,
|
|
1120
|
+
)
|
|
1121
|
+
from coord.drive_queue import ( # noqa: PLC0415
|
|
1122
|
+
QueueError,
|
|
1123
|
+
entries_from_rows,
|
|
1124
|
+
entry_key,
|
|
1125
|
+
validate_enqueue,
|
|
1126
|
+
)
|
|
1127
|
+
from coord.state import enqueue_drive_queue, list_drive_queue # noqa: PLC0415
|
|
1107
1128
|
|
|
1108
1129
|
click.echo()
|
|
1109
1130
|
failures = 0
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1131
|
+
queued = 0
|
|
1132
|
+
for qe in queue_plan:
|
|
1133
|
+
# Re-read per entry so each add validates (and overlap-predicts)
|
|
1134
|
+
# against the queue as its just-added siblings left it.
|
|
1135
|
+
existing = entries_from_rows(list_drive_queue())
|
|
1136
|
+
after = list(qe.after)
|
|
1137
|
+
key = entry_key(repo_entry.name, qe.issue_number)
|
|
1138
|
+
try:
|
|
1139
|
+
validate_enqueue(existing, repo_entry.name, qe.issue_number, after)
|
|
1140
|
+
except QueueError as exc:
|
|
1141
|
+
click.echo(f" {key}: not queued: {exc}", err=True)
|
|
1114
1142
|
failures += 1
|
|
1143
|
+
continue
|
|
1144
|
+
prediction = _predict_overlap(
|
|
1145
|
+
config_path, repo_entry.name, qe.issue_number, existing
|
|
1146
|
+
)
|
|
1147
|
+
auto_after = _applicable_auto_after(
|
|
1148
|
+
existing, repo_entry.name, qe.issue_number, after, prediction
|
|
1149
|
+
)
|
|
1150
|
+
after = [*after, *auto_after]
|
|
1151
|
+
enqueue_drive_queue(repo_entry.name, qe.issue_number, after=after)
|
|
1152
|
+
if auto_after:
|
|
1153
|
+
_record_overlap_prediction(
|
|
1154
|
+
repo_entry.name, qe.issue_number, prediction, auto_after
|
|
1155
|
+
)
|
|
1156
|
+
suffix = f" after {', '.join(after)}" if after else ""
|
|
1157
|
+
overlap_note = f"\n {prediction.reason}" if auto_after else ""
|
|
1158
|
+
click.echo(f" queued {key}{suffix}{overlap_note}")
|
|
1159
|
+
queued += 1
|
|
1115
1160
|
|
|
1116
|
-
if
|
|
1117
|
-
from coord.state import register_milestone_drain
|
|
1118
|
-
|
|
1119
|
-
register_milestone_drain(repo_name=repo_entry.name, tracking_issue=tracking_issue)
|
|
1161
|
+
if queued:
|
|
1120
1162
|
click.echo()
|
|
1121
1163
|
click.echo(
|
|
1122
|
-
f"
|
|
1123
|
-
"
|
|
1124
|
-
"
|
|
1125
|
-
"
|
|
1164
|
+
f"{queued} issue(s) queued — `coord drive-queue tick` (the DQ-4 "
|
|
1165
|
+
"timer, or run it manually) launches them in dependency order; "
|
|
1166
|
+
"`coord drive-queue list` shows the queue. Entries are durable "
|
|
1167
|
+
"across coordinator restarts."
|
|
1126
1168
|
)
|
|
1127
1169
|
|
|
1128
1170
|
if failures:
|
|
@@ -16,7 +16,10 @@ not an LLM judgment call like ``coord.brain.propose``.
|
|
|
16
16
|
Three call sites share this module:
|
|
17
17
|
|
|
18
18
|
- ``coord milestone dispatch`` (``coord/commands/milestone.py``) — the
|
|
19
|
-
|
|
19
|
+
``--next`` single-pick still dispatches directly through
|
|
20
|
+
:func:`plan_dispatch`/:func:`dispatch_entry`; bulk mode instead derives
|
|
21
|
+
drive-queue enqueues from the work order via :func:`plan_queue` (#2335),
|
|
22
|
+
so the DQ-4 tick owns the actual launches.
|
|
20
23
|
- The daemon's auto-drain tick (``coord.serve_app._milestone_drain_tick``,
|
|
21
24
|
opt-in via ``coordinator.yml`` ``milestone.auto_dispatch``) — re-runs the
|
|
22
25
|
same fetch → plan → dispatch sequence for milestones registered via a
|
|
@@ -38,6 +41,7 @@ from coord.milestone_order import (
|
|
|
38
41
|
FrontierEntry,
|
|
39
42
|
WorkOrder,
|
|
40
43
|
WorkOrderError,
|
|
44
|
+
WorkOrderNode,
|
|
41
45
|
parse_work_order,
|
|
42
46
|
ready_frontier,
|
|
43
47
|
validate_milestone_membership,
|
|
@@ -64,6 +68,8 @@ __all__ = [
|
|
|
64
68
|
"NoMachineAvailable",
|
|
65
69
|
"MilestonePlan",
|
|
66
70
|
"plan_dispatch",
|
|
71
|
+
"QueuePlanEntry",
|
|
72
|
+
"plan_queue",
|
|
67
73
|
"DispatchOutcome",
|
|
68
74
|
"dispatch_entry",
|
|
69
75
|
"is_milestone_complete",
|
|
@@ -684,6 +690,74 @@ def plan_dispatch(
|
|
|
684
690
|
)
|
|
685
691
|
|
|
686
692
|
|
|
693
|
+
@dataclass(frozen=True)
|
|
694
|
+
class QueuePlanEntry:
|
|
695
|
+
"""One drive-queue enqueue derived from a work-order node (#2335)."""
|
|
696
|
+
|
|
697
|
+
issue_number: int
|
|
698
|
+
#: Fully-qualified pre-req keys (``"repo#N"``) for the drive-queue's
|
|
699
|
+
#: ``after=`` edge list — the node's declared ``{after: #N}`` targets,
|
|
700
|
+
#: minus any that are already terminal (closed issues never enter the
|
|
701
|
+
#: queue, so an edge at one would read as unsatisfiable to the tick's
|
|
702
|
+
#: ``_resolve_prereqs`` rather than as "already done").
|
|
703
|
+
after: tuple[str, ...] = ()
|
|
704
|
+
group: str | None = None
|
|
705
|
+
|
|
706
|
+
|
|
707
|
+
def plan_queue(
|
|
708
|
+
work_order: WorkOrder,
|
|
709
|
+
terminal_issues: frozenset[int] | set[int],
|
|
710
|
+
repo_name: str,
|
|
711
|
+
) -> tuple[QueuePlanEntry, ...]:
|
|
712
|
+
"""Translate the work order's DAG into drive-queue enqueues (#2335).
|
|
713
|
+
|
|
714
|
+
Pure — no GitHub, no board, no side effects. One entry per non-terminal
|
|
715
|
+
node, in dependency order: a stable topological sort seeded by declared
|
|
716
|
+
order, so independent nodes keep the operator's declared sequence while a
|
|
717
|
+
node declared *before* its own pre-req still queues after it (queue
|
|
718
|
+
position is the tick's tie-break among eligible entries; the ``after``
|
|
719
|
+
edges are what actually gate launches).
|
|
720
|
+
|
|
721
|
+
Each entry's ``after`` carries the node's declared ``{after: #N}`` edges
|
|
722
|
+
as fully-qualified ``repo#N`` keys — the same format ``coord drive-queue
|
|
723
|
+
add --after`` parses — filtered to pre-reqs that are still open.
|
|
724
|
+
:func:`~coord.milestone_order.parse_work_order` already refused cycles,
|
|
725
|
+
self-edges, and edges to undeclared nodes, so the sort always terminates;
|
|
726
|
+
the defensive tail below only fires on inputs constructed outside it.
|
|
727
|
+
"""
|
|
728
|
+
from coord.drive_queue import entry_key # noqa: PLC0415
|
|
729
|
+
|
|
730
|
+
terminal = set(terminal_issues)
|
|
731
|
+
remaining: dict[int, WorkOrderNode] = {
|
|
732
|
+
n.issue_number: n for n in work_order.nodes if n.issue_number not in terminal
|
|
733
|
+
}
|
|
734
|
+
open_set = set(remaining)
|
|
735
|
+
placed: set[int] = set()
|
|
736
|
+
ordered: list[WorkOrderNode] = []
|
|
737
|
+
while remaining:
|
|
738
|
+
progressed = False
|
|
739
|
+
for number, node in list(remaining.items()):
|
|
740
|
+
if any(d in open_set and d not in placed for d in node.after):
|
|
741
|
+
continue
|
|
742
|
+
ordered.append(node)
|
|
743
|
+
placed.add(number)
|
|
744
|
+
del remaining[number]
|
|
745
|
+
progressed = True
|
|
746
|
+
if not progressed: # cycle — unreachable via parse_work_order; see above
|
|
747
|
+
ordered.extend(remaining.values())
|
|
748
|
+
break
|
|
749
|
+
return tuple(
|
|
750
|
+
QueuePlanEntry(
|
|
751
|
+
issue_number=n.issue_number,
|
|
752
|
+
after=tuple(
|
|
753
|
+
entry_key(repo_name, d) for d in n.after if d not in terminal
|
|
754
|
+
),
|
|
755
|
+
group=n.group,
|
|
756
|
+
)
|
|
757
|
+
for n in ordered
|
|
758
|
+
)
|
|
759
|
+
|
|
760
|
+
|
|
687
761
|
@dataclass(frozen=True)
|
|
688
762
|
class DispatchOutcome:
|
|
689
763
|
"""The result of one :func:`dispatch_entry` call."""
|
|
@@ -1283,8 +1283,11 @@ def _milestone_drain_tick(config: Config) -> list:
|
|
|
1283
1283
|
|
|
1284
1284
|
Called by ``_tick_loop`` when ``milestone.auto_dispatch: true`` is set in
|
|
1285
1285
|
``coordinator.yml`` (default-off). For each ``(repo_name, tracking_issue)``
|
|
1286
|
-
registered via
|
|
1287
|
-
|
|
1286
|
+
registered via ``coord.state.register_milestone_drain`` (historically the
|
|
1287
|
+
non-dry-run ``coord milestone dispatch`` bulk path — since #2335 that
|
|
1288
|
+
path enqueues the work order into the drive-queue instead and registers
|
|
1289
|
+
nothing, so only pre-#2335 registrations feed this tick), re-fetches the
|
|
1290
|
+
tracking issue, recomputes the
|
|
1288
1291
|
ready frontier (:func:`coord.milestone_dispatch.plan_dispatch`), and
|
|
1289
1292
|
dispatches any newly-unblocked entries — the same mechanism a manual
|
|
1290
1293
|
``coord milestone dispatch`` uses, so a fix that lands and merges for one
|
|
@@ -167,7 +167,7 @@ The auto-loop above sequences a *single* issue. For work that spans many issues,
|
|
|
167
167
|
|
|
168
168
|
Layering is deliberate: `evaluate_gate(gate, probes)` is **pure** (gate name + a `GateProbes` value in, one `GateStep` out — no board, no GitHub, no clock), so every edge in the machine is decided in exactly one place and any edge is testable without I/O; `probe_milestone()` is the I/O half and reuses the *existing* readers (`milestone_dispatch.gate_a_status`, `gate_b.latest_gate_b_verdict`) so the gate walk and the manual CLI can never disagree about whether a gate is satisfied. `work` is the only state with a side effect, and it delegates to `plan_dispatch` + `dispatch_entry` rather than adding a second dispatch path. Every other edge is currently an explicit, logged **hold** — the machine reports why it cannot advance and stays put. There is no silent fall-through anywhere in the module; that is the failure mode that produced the 240-minute advisory spin in the per-issue driver.
|
|
169
169
|
|
|
170
|
-
**`drive` vs. `milestone.auto_dispatch` — mutually exclusive per milestone, gate driving wins.** `milestone.auto_dispatch` gates the *legacy standalone drain* (`_milestone_drain_tick`): a milestone registered by `coord milestone dispatch` whose frontier the daemon re-drains with no gate walk around it. A milestone with a gate record is driven by `_milestone_gate_tick` instead, which owns the drain as its `work` state — so `_milestone_drain_tick` **skips** any `(repo_name, tracking_issue)` that has a gate record. Without that exclusion a milestone parked at Gate A could still have its frontier dispatched by the independently-gated drain path. Gate driving is consequently its own per-milestone opt-in (`coord milestone drive`) and `_milestone_gate_tick` is *not* behind the global flag — hiding it there would make `drive` silently no-op.
|
|
170
|
+
**`drive` vs. `milestone.auto_dispatch` — mutually exclusive per milestone, gate driving wins.** `milestone.auto_dispatch` gates the *legacy standalone drain* (`_milestone_drain_tick`): a milestone registered by a pre-#2335 `coord milestone dispatch` whose frontier the daemon re-drains with no gate walk around it. (Since #2335 the bulk `coord milestone dispatch` path enqueues the whole `## Work order` DAG into the drive-queue — `after=` edges carry the dependencies, the DQ-4 tick launches, and nothing new registers for this drain.) A milestone with a gate record is driven by `_milestone_gate_tick` instead, which owns the drain as its `work` state — so `_milestone_drain_tick` **skips** any `(repo_name, tracking_issue)` that has a gate record. Without that exclusion a milestone parked at Gate A could still have its frontier dispatched by the independently-gated drain path. Gate driving is consequently its own per-milestone opt-in (`coord milestone drive`) and `_milestone_gate_tick` is *not* behind the global flag — hiding it there would make `drive` silently no-op.
|
|
171
171
|
|
|
172
172
|
**Exactly one overseer, structurally (#1930).** The gate tick is the sole owner of a gate-controlled milestone's `work` drain. `coord milestone drive` only ever writes/re-persists the `GateRecord` — it never calls `apply_step` or dispatches, so running it twice (any operator, any machine) is inert, not a race. `coord milestone dispatch`, the manual non-gate CLI, now refuses outright against a milestone with a gate record — before #1930 it had no way to know one existed and would dispatch the same frontier the gate tick's `work` state owns, the same "two gates disagreeing about whether work may start" shape #1870 fixed for the drive queue, reached from an operator's keyboard instead of a second host's timer.
|
|
173
173
|
|