code-coordinator 0.5.136__tar.gz → 0.5.140__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.136 → code_coordinator-0.5.140}/PKG-INFO +1 -1
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/SOURCES.txt +4 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/scm_file_list.json +4 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/agent.py +42 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/agent_app.py +70 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/release.py +161 -26
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/drive.py +71 -10
- code_coordinator-0.5.140/coord/reconcile_tick.py +65 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/AGENT_OPERATIONS.md +42 -0
- code_coordinator-0.5.140/tests/acceptance/ms-65/board_tabs_close_2283.rs +1049 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/manifest.yml +120 -0
- code_coordinator-0.5.140/tests/test_agent_drive_queue_reconcile_2373.py +157 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_drive.py +118 -7
- code_coordinator-0.5.140/tests/test_reconcile_tick.py +82 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_cordon_2101.py +160 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/dialogs.rs +28 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/escalation.rs +365 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/mod.rs +13 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/tests/acceptance.rs +1 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/.gitignore +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/CLAUDE.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/GOAL.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/LICENSE +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/MANIFEST.in +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/README.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/__init__.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/audit.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/block_log.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/board_service.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/brain.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/claim.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/cli.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/client.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/comments.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/config.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dao.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/db.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/deps.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/events.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/filelock.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/freshness.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/gates.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/goal.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/context.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/models.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/render.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/health/units.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/hooks.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/interactive.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/models.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/network.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/notify.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/openapi.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/parentage.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/plans.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/progress.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/release_window.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/reports.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/review.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/smoke.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/split_work.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/state.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/test_author.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/test_report.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/usage.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/install-agent.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/pyproject.toml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/setup.cfg +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/__init__.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/conftest.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_config.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_db.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_events.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_init.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_models.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_network.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_session.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_split.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_state.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/doc_tabs.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/tests.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.136 → code_coordinator-0.5.140}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -112,6 +112,7 @@ coord/prereqs.py
|
|
|
112
112
|
coord/progress.py
|
|
113
113
|
coord/queue_diagnose.py
|
|
114
114
|
coord/reconcile.py
|
|
115
|
+
coord/reconcile_tick.py
|
|
115
116
|
coord/refine_chat.py
|
|
116
117
|
coord/release_cordon.py
|
|
117
118
|
coord/release_propagate.py
|
|
@@ -431,6 +432,7 @@ tests/test_agent_branch_capture.py
|
|
|
431
432
|
tests/test_agent_config_free_1712.py
|
|
432
433
|
tests/test_agent_deploy_units_endpoint.py
|
|
433
434
|
tests/test_agent_dirty_worktree.py
|
|
435
|
+
tests/test_agent_drive_queue_reconcile_2373.py
|
|
434
436
|
tests/test_agent_graph_self_heal.py
|
|
435
437
|
tests/test_agent_health_h3.py
|
|
436
438
|
tests/test_agent_idle_restart.py
|
|
@@ -682,6 +684,7 @@ tests/test_reconcile_branch.py
|
|
|
682
684
|
tests/test_reconcile_completions.py
|
|
683
685
|
tests/test_reconcile_merges.py
|
|
684
686
|
tests/test_reconcile_no_agent_record.py
|
|
687
|
+
tests/test_reconcile_tick.py
|
|
685
688
|
tests/test_reconcile_usage_limit_done.py
|
|
686
689
|
tests/test_refine_chat.py
|
|
687
690
|
tests/test_release_cordon_2101.py
|
|
@@ -788,6 +791,7 @@ tests/acceptance/ms-51/manifest.yml
|
|
|
788
791
|
tests/acceptance/ms-51/tsconfig.json
|
|
789
792
|
tests/acceptance/ms-51/mocks/home-active.html
|
|
790
793
|
tests/acceptance/ms-65/board_tabs_2282.rs
|
|
794
|
+
tests/acceptance/ms-65/board_tabs_close_2283.rs
|
|
791
795
|
tests/acceptance/ms-65/contract.md
|
|
792
796
|
tests/acceptance/ms-65/manifest.yml
|
|
793
797
|
tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen
|
{code_coordinator-0.5.136 → code_coordinator-0.5.140}/code_coordinator.egg-info/scm_file_list.json
RENAMED
|
@@ -293,6 +293,7 @@
|
|
|
293
293
|
"coord/providers/opencode.py",
|
|
294
294
|
"coord/queue_diagnose.py",
|
|
295
295
|
"coord/reconcile.py",
|
|
296
|
+
"coord/reconcile_tick.py",
|
|
296
297
|
"coord/refine_chat.py",
|
|
297
298
|
"coord/release_cordon.py",
|
|
298
299
|
"coord/release_propagate.py",
|
|
@@ -431,6 +432,7 @@
|
|
|
431
432
|
"tests/acceptance/ms-51/mocks/home-active.html",
|
|
432
433
|
"tests/acceptance/ms-51/tsconfig.json",
|
|
433
434
|
"tests/acceptance/ms-65/board_tabs_2282.rs",
|
|
435
|
+
"tests/acceptance/ms-65/board_tabs_close_2283.rs",
|
|
434
436
|
"tests/acceptance/ms-65/contract.md",
|
|
435
437
|
"tests/acceptance/ms-65/manifest.yml",
|
|
436
438
|
"tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen",
|
|
@@ -473,6 +475,7 @@
|
|
|
473
475
|
"tests/test_agent_config_free_1712.py",
|
|
474
476
|
"tests/test_agent_deploy_units_endpoint.py",
|
|
475
477
|
"tests/test_agent_dirty_worktree.py",
|
|
478
|
+
"tests/test_agent_drive_queue_reconcile_2373.py",
|
|
476
479
|
"tests/test_agent_graph_self_heal.py",
|
|
477
480
|
"tests/test_agent_health_h3.py",
|
|
478
481
|
"tests/test_agent_idle_restart.py",
|
|
@@ -724,6 +727,7 @@
|
|
|
724
727
|
"tests/test_reconcile_completions.py",
|
|
725
728
|
"tests/test_reconcile_merges.py",
|
|
726
729
|
"tests/test_reconcile_no_agent_record.py",
|
|
730
|
+
"tests/test_reconcile_tick.py",
|
|
727
731
|
"tests/test_reconcile_usage_limit_done.py",
|
|
728
732
|
"tests/test_refine_chat.py",
|
|
729
733
|
"tests/test_release_cordon_2101.py",
|
|
@@ -6102,6 +6102,48 @@ class AgentServer:
|
|
|
6102
6102
|
self._local_health_cache = None
|
|
6103
6103
|
return {**result.to_dict(), "repo": repo_name}
|
|
6104
6104
|
|
|
6105
|
+
def reconcile_drive_queue(self, *, timeout: float = 120.0) -> dict:
|
|
6106
|
+
"""``coord drive-queue tick --reconcile-only`` — run on THIS machine
|
|
6107
|
+
(#2373 — ``coord release propagate``'s drain-deadline escalation
|
|
6108
|
+
fans this out to a host it has cordoned but that will not drain, via
|
|
6109
|
+
`_reconcile_launch_host` in `coord/commands/release.py`).
|
|
6110
|
+
|
|
6111
|
+
Only the machine that launched a `running` drive-queue entry can
|
|
6112
|
+
resolve it (the #1870 cross-host guard in
|
|
6113
|
+
`coord.drive_queue._reconcile_running` is keyed on a LOCAL tmux
|
|
6114
|
+
read); this method is that resolution, reachable over this agent's
|
|
6115
|
+
HTTP API instead of a human's SSH session. Full incident writeup
|
|
6116
|
+
(claude-coordinator#2360) and rationale: `_reconcile_launch_host`'s
|
|
6117
|
+
docstring and docs/AGENT_OPERATIONS.md's #2373 section.
|
|
6118
|
+
|
|
6119
|
+
Delegates to :func:`coord.reconcile_tick.run_reconcile_tick` — the
|
|
6120
|
+
same shared implementation `coord release propagate`'s own
|
|
6121
|
+
`_run_reconcile_tick` (`coord/commands/release.py`) calls, so there
|
|
6122
|
+
is exactly one implementation of "what a reconcile-only tick does",
|
|
6123
|
+
not two that can drift apart.
|
|
6124
|
+
|
|
6125
|
+
Returns ``{"ok": bool, "detail": str}``. ``ok=False`` with a
|
|
6126
|
+
``no local coordinator.yml`` detail when this agent has no on-disk
|
|
6127
|
+
config to pass as ``--config`` — thin-client/config-free mode
|
|
6128
|
+
(docs/EPHEMERAL_WORKERS.md) has nothing for a queue tick to resolve
|
|
6129
|
+
against here. Never raises: the caller (`/drive-queue-reconcile`) is
|
|
6130
|
+
a best-effort self-heal step inside a larger escalation, not a gate
|
|
6131
|
+
that may take propagation down with it.
|
|
6132
|
+
"""
|
|
6133
|
+
from coord.reconcile_tick import run_reconcile_tick # noqa: PLC0415
|
|
6134
|
+
|
|
6135
|
+
config_path = getattr(self._health_config, "path", None)
|
|
6136
|
+
if not config_path:
|
|
6137
|
+
return {
|
|
6138
|
+
"ok": False,
|
|
6139
|
+
"detail": (
|
|
6140
|
+
"no local coordinator.yml on this agent — cannot resolve "
|
|
6141
|
+
"a --config path for the tick"
|
|
6142
|
+
),
|
|
6143
|
+
}
|
|
6144
|
+
ok, detail = run_reconcile_tick(config_path, timeout=timeout, detail_limit=2000)
|
|
6145
|
+
return {"ok": ok, "detail": detail}
|
|
6146
|
+
|
|
6105
6147
|
def list_repos(self) -> dict[str, dict]:
|
|
6106
6148
|
"""Return local HEAD / branch / dirty flag for each configured repo.
|
|
6107
6149
|
|
|
@@ -1020,6 +1020,42 @@ def _openapi_spec() -> dict:
|
|
|
1020
1020
|
},
|
|
1021
1021
|
}
|
|
1022
1022
|
},
|
|
1023
|
+
"/drive-queue-reconcile": {
|
|
1024
|
+
"post": {
|
|
1025
|
+
"summary": (
|
|
1026
|
+
"Run `coord drive-queue tick --reconcile-only` on this "
|
|
1027
|
+
"machine (#2373)"
|
|
1028
|
+
),
|
|
1029
|
+
"description": (
|
|
1030
|
+
"The per-machine self-heal `coord release propagate`'s "
|
|
1031
|
+
"drain-deadline escalation calls before it escalates "
|
|
1032
|
+
"loudly: only the host that actually launched a "
|
|
1033
|
+
"`running` drive-queue entry can resolve the #1870 "
|
|
1034
|
+
"cross-host liveness guard for it. Fleet-queue-wide, "
|
|
1035
|
+
"not scoped to a repo."
|
|
1036
|
+
),
|
|
1037
|
+
"requestBody": {
|
|
1038
|
+
"required": False,
|
|
1039
|
+
"content": {
|
|
1040
|
+
"application/json": {
|
|
1041
|
+
"schema": {
|
|
1042
|
+
"type": "object",
|
|
1043
|
+
"properties": {
|
|
1044
|
+
"timeout": {
|
|
1045
|
+
"type": "number",
|
|
1046
|
+
"description": (
|
|
1047
|
+
"seconds for the tick subprocess; "
|
|
1048
|
+
"defaults to 120."
|
|
1049
|
+
),
|
|
1050
|
+
},
|
|
1051
|
+
},
|
|
1052
|
+
}
|
|
1053
|
+
}
|
|
1054
|
+
},
|
|
1055
|
+
},
|
|
1056
|
+
"responses": {"200": {"description": "OK (including a failed tick)"}},
|
|
1057
|
+
}
|
|
1058
|
+
},
|
|
1023
1059
|
"/artifact/{repo}/{branch}": {
|
|
1024
1060
|
"get": {
|
|
1025
1061
|
"summary": "Manifest of stashed build artifacts for a (repo, branch) pair",
|
|
@@ -1948,6 +1984,36 @@ def build_app(
|
|
|
1948
1984
|
result = await asyncio.to_thread(server.fix_graph, repo, timeout=timeout)
|
|
1949
1985
|
return JSONResponse(result)
|
|
1950
1986
|
|
|
1987
|
+
async def drive_queue_reconcile(request: Request) -> JSONResponse:
|
|
1988
|
+
"""Run ``coord drive-queue tick --reconcile-only`` on THIS machine
|
|
1989
|
+
(#2373). ``coord release propagate``'s drain-deadline escalation
|
|
1990
|
+
POSTs here — before it escalates loudly — on whichever host it has
|
|
1991
|
+
cordoned but that will not drain, so the one machine that can
|
|
1992
|
+
actually resolve the #1870 cross-host liveness ambiguity for an
|
|
1993
|
+
entry it launched gets asked to, automatically, instead of a human
|
|
1994
|
+
needing to SSH in and run this by hand (the live 2026-08-18 incident
|
|
1995
|
+
this closes).
|
|
1996
|
+
|
|
1997
|
+
Body: optional ``{"timeout": 120}``. No required fields, unlike
|
|
1998
|
+
``/graph-fix`` — a reconcile-only tick is fleet-queue-wide, not
|
|
1999
|
+
scoped to one repo.
|
|
2000
|
+
|
|
2001
|
+
Runs off the event loop: the subprocess holds the drive-queue file
|
|
2002
|
+
lock for the length of one tick, which must never stall this
|
|
2003
|
+
agent's ``/health`` for the rest of the fleet.
|
|
2004
|
+
"""
|
|
2005
|
+
body: dict = {}
|
|
2006
|
+
try:
|
|
2007
|
+
body = await request.json()
|
|
2008
|
+
except Exception:
|
|
2009
|
+
pass
|
|
2010
|
+
try:
|
|
2011
|
+
timeout = float(body.get("timeout", 120.0))
|
|
2012
|
+
except (TypeError, ValueError):
|
|
2013
|
+
timeout = 120.0
|
|
2014
|
+
result = await asyncio.to_thread(server.reconcile_drive_queue, timeout=timeout)
|
|
2015
|
+
return JSONResponse(result)
|
|
2016
|
+
|
|
1951
2017
|
routes = [
|
|
1952
2018
|
Route("/health", health, methods=["GET"]),
|
|
1953
2019
|
Route("/status", status, methods=["GET"]),
|
|
@@ -1973,6 +2039,10 @@ def build_app(
|
|
|
1973
2039
|
# missing graph and set core.hooksPath, on the machines that
|
|
1974
2040
|
# actually run workers rather than only on the operator's laptop.
|
|
1975
2041
|
Route("/graph-fix", graph_fix, methods=["POST"]),
|
|
2042
|
+
# #2373: `coord release propagate`'s drain-deadline escalation's
|
|
2043
|
+
# per-machine self-heal — resolve a `running` drive-queue entry this
|
|
2044
|
+
# host launched before the escalation fires loudly.
|
|
2045
|
+
Route("/drive-queue-reconcile", drive_queue_reconcile, methods=["POST"]),
|
|
1976
2046
|
# #305: artifact stash manifest (GET /artifact/<repo>/<branch>)
|
|
1977
2047
|
Route("/artifact/{repo}/{branch}", artifact_manifest, methods=["GET"]),
|
|
1978
2048
|
# #207: CPU + memory snapshot for TUI sparklines
|
|
@@ -503,6 +503,77 @@ def _post(url: str, payload: dict, *, timeout: float) -> tuple[int | None, dict,
|
|
|
503
503
|
return resp.status_code, (body if isinstance(body, dict) else {}), ""
|
|
504
504
|
|
|
505
505
|
|
|
506
|
+
#: #2373: default timeout for the remote-reconcile POST below. Generous, but
|
|
507
|
+
#: still small next to `DEFAULT_DRAIN_DEADLINE_SECONDS` (90 minutes), so a
|
|
508
|
+
#: wedged/unreachable agent never turns "ask before escalating" into a
|
|
509
|
+
#: second, longer wait before the loud message an operator is actually
|
|
510
|
+
#: watching for. The POST body forwards a *shorter* remote-subprocess
|
|
511
|
+
#: timeout (see `_RECONCILE_TIMEOUT_MARGIN_SECONDS` below) so the remote
|
|
512
|
+
#: agent's own tick (`AgentServer.reconcile_drive_queue`, otherwise 120s by
|
|
513
|
+
#: default) can never outlive this wait — without that, a tick legitimately
|
|
514
|
+
#: taking longer than this timeout would surface here as a misleading
|
|
515
|
+
#: "unreachable" even though it was still running and would have resolved
|
|
516
|
+
#: correctly on its own.
|
|
517
|
+
DEFAULT_RECONCILE_TIMEOUT_SECONDS = 30.0
|
|
518
|
+
|
|
519
|
+
#: Margin subtracted from *timeout* before it is forwarded as the remote
|
|
520
|
+
#: subprocess's own timeout (see `_reconcile_launch_host`) — leaves the
|
|
521
|
+
#: agent's HTTP handler room to marshal and return its response before
|
|
522
|
+
#: this side's own `httpx` deadline fires.
|
|
523
|
+
_RECONCILE_TIMEOUT_MARGIN_SECONDS = 5.0
|
|
524
|
+
|
|
525
|
+
|
|
526
|
+
def _reconcile_launch_host(
|
|
527
|
+
machine_host: str,
|
|
528
|
+
*,
|
|
529
|
+
agent_port: int,
|
|
530
|
+
timeout: float = DEFAULT_RECONCILE_TIMEOUT_SECONDS,
|
|
531
|
+
post=None,
|
|
532
|
+
) -> tuple[bool | None, str]:
|
|
533
|
+
"""Ask *machine_host*'s own agent to run a local reconcile-only tick
|
|
534
|
+
(#2373), over the same ``POST /<verb>`` HTTP pattern ``/graph-fix``
|
|
535
|
+
already uses for a per-machine self-heal fanned out from elsewhere.
|
|
536
|
+
|
|
537
|
+
Why this has to be a REMOTE call rather than something run locally by
|
|
538
|
+
whichever host happens to be executing `coord release propagate`: the
|
|
539
|
+
#1870 cross-host guard (`coord.drive_queue._reconcile_running`) is keyed
|
|
540
|
+
on a LOCAL tmux read, so only the machine that actually launched a
|
|
541
|
+
`running` drive-queue entry can ever resolve whether it is still alive.
|
|
542
|
+
A non-daemon launch host has no periodic tick of its own — confirmed
|
|
543
|
+
live 2026-08-18 (claude-coordinator#2360): elitebook ran only
|
|
544
|
+
`coord-agent.service`, dellserver's `coord-drive-queue.timer` correctly
|
|
545
|
+
refused to declare a foreign-host entry dead every time it ticked, and
|
|
546
|
+
the ambiguity sat wedging the fleet's release drain for ~17h until a
|
|
547
|
+
human happened to SSH in and run this exact command by hand. Routing it
|
|
548
|
+
through the agent HTTP API that already runs on every machine capable of
|
|
549
|
+
launching a drive closes that gap without a new timer unit anywhere.
|
|
550
|
+
|
|
551
|
+
Returns ``(ok, detail)``. ``ok`` is ``None`` when the call could not even
|
|
552
|
+
be attempted (never treated as a *failure* by the caller — see
|
|
553
|
+
:func:`_escalate_drain`), ``False`` on an unreachable agent or a non-200
|
|
554
|
+
response, ``True`` when the agent ran the tick (its own exit code, not
|
|
555
|
+
"and it resolved the entry" — a genuinely still-busy host is expected to
|
|
556
|
+
report ``ok=True`` with nothing to reconcile).
|
|
557
|
+
|
|
558
|
+
The POST body forwards a remote subprocess timeout derived from
|
|
559
|
+
*timeout* itself (minus `_RECONCILE_TIMEOUT_MARGIN_SECONDS`) rather than
|
|
560
|
+
leaving the remote agent to fall back to its own 120s default
|
|
561
|
+
(`AgentServer.reconcile_drive_queue`) — otherwise a tick that legitimately
|
|
562
|
+
takes longer than this call's own HTTP wait reports here as
|
|
563
|
+
`ok=False, detail="unreachable: ..."` even though it is still running and
|
|
564
|
+
will resolve correctly on its own, just not attributed to this call.
|
|
565
|
+
"""
|
|
566
|
+
poster = post or _post
|
|
567
|
+
url = f"http://{machine_host}:{agent_port}/drive-queue-reconcile"
|
|
568
|
+
remote_timeout = max(1.0, timeout - _RECONCILE_TIMEOUT_MARGIN_SECONDS)
|
|
569
|
+
status, body, err = poster(url, {"timeout": remote_timeout}, timeout=timeout)
|
|
570
|
+
if err:
|
|
571
|
+
return False, f"unreachable: {err}"
|
|
572
|
+
if status != 200:
|
|
573
|
+
return False, f"HTTP {status}: {body.get('detail') or body}"
|
|
574
|
+
return bool(body.get("ok")), str(body.get("detail") or "")
|
|
575
|
+
|
|
576
|
+
|
|
506
577
|
def _lane_versions_by_host(report) -> dict[str, list[str | None]]:
|
|
507
578
|
out: dict[str, list[str | None]] = {}
|
|
508
579
|
for lane in report.lanes:
|
|
@@ -791,6 +862,11 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
791
862
|
max_deferrals=cordon_max_deferrals,
|
|
792
863
|
release_cooldown=cordon_cooldown,
|
|
793
864
|
daemon_host=daemon_name,
|
|
865
|
+
# #2373: lets a blown drain deadline ask the escalated host's own
|
|
866
|
+
# agent to resolve the #1870 cross-host liveness ambiguity locally
|
|
867
|
+
# before the loud message goes out — see `_reconcile_launch_host`.
|
|
868
|
+
machines=getattr(config, "machines", ()) or (),
|
|
869
|
+
agent_port=AGENT_PORT,
|
|
794
870
|
)
|
|
795
871
|
|
|
796
872
|
if fully_busy and not force:
|
|
@@ -1162,6 +1238,9 @@ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
|
|
|
1162
1238
|
max_deferrals: int | None = None,
|
|
1163
1239
|
release_cooldown: float | None = None,
|
|
1164
1240
|
daemon_host: str | None = None,
|
|
1241
|
+
machines=None,
|
|
1242
|
+
agent_port: int | None = None,
|
|
1243
|
+
reconcile_timeout: float | None = None,
|
|
1165
1244
|
) -> dict:
|
|
1166
1245
|
"""Plan and apply this run's cordons. Returns the journal fragment.
|
|
1167
1246
|
|
|
@@ -1185,6 +1264,13 @@ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
|
|
|
1185
1264
|
pre-#2240 behaviour) rather than to a spurious release: dropping the
|
|
1186
1265
|
fleet's cordon because a file could not be read is the wrong direction to
|
|
1187
1266
|
fail in.
|
|
1267
|
+
|
|
1268
|
+
#2373: *machines*/*agent_port* let each :class:`~coord.release_cordon.
|
|
1269
|
+
DrainEscalation` ask the escalated host's OWN agent to run a local
|
|
1270
|
+
reconcile-only tick before the loud message goes out — see
|
|
1271
|
+
:func:`_reconcile_launch_host`. ``machines=None`` (a caller with no fleet
|
|
1272
|
+
topology, e.g. a unit test exercising `plan_cordons` output directly)
|
|
1273
|
+
skips the remote call entirely and escalates exactly as before #2373.
|
|
1188
1274
|
"""
|
|
1189
1275
|
import time # noqa: PLC0415
|
|
1190
1276
|
|
|
@@ -1304,9 +1390,39 @@ def _apply_cordons( # noqa: PLR0912 — one linear apply-the-plan pass
|
|
|
1304
1390
|
outcome.errors.append(f"release cordon {name}: {exc}")
|
|
1305
1391
|
click.echo(f" ✗ release cordon {name}: {exc}", err=True)
|
|
1306
1392
|
|
|
1393
|
+
machines_by_name = {m.name: m for m in (machines or ())}
|
|
1394
|
+
# #2373: each escalation below makes one synchronous `_reconcile_launch_host`
|
|
1395
|
+
# HTTP call, serially, each blocking up to ~`DEFAULT_RECONCILE_TIMEOUT_SECONDS`.
|
|
1396
|
+
# With multiple simultaneously-overdue hosts this adds up to N * timeout of
|
|
1397
|
+
# latency inside one `release propagate` invocation. Fine today — escalations
|
|
1398
|
+
# are rare and few at once — but if that ever stops being true, parallelize
|
|
1399
|
+
# this loop (e.g. a thread pool over `plan.escalations`) rather than letting
|
|
1400
|
+
# a single propagate call silently grow with fleet size.
|
|
1307
1401
|
for escalation in plan.escalations:
|
|
1308
|
-
|
|
1309
|
-
|
|
1402
|
+
# #2373: before the loud message, give the escalated host's OWN
|
|
1403
|
+
# agent one chance to resolve the ambiguity that is actually holding
|
|
1404
|
+
# it — see `_reconcile_launch_host`'s docstring. `machine` missing
|
|
1405
|
+
# from the fleet map, or no `agent_port` supplied (a caller with no
|
|
1406
|
+
# HTTP topology), skips the call rather than guessing an address.
|
|
1407
|
+
reconcile_ok: bool | None = None
|
|
1408
|
+
reconcile_detail = ""
|
|
1409
|
+
target = machines_by_name.get(escalation.machine)
|
|
1410
|
+
if target is not None and agent_port:
|
|
1411
|
+
reconcile_ok, reconcile_detail = _reconcile_launch_host(
|
|
1412
|
+
target.host,
|
|
1413
|
+
agent_port=agent_port,
|
|
1414
|
+
timeout=(
|
|
1415
|
+
DEFAULT_RECONCILE_TIMEOUT_SECONDS
|
|
1416
|
+
if reconcile_timeout is None
|
|
1417
|
+
else reconcile_timeout
|
|
1418
|
+
),
|
|
1419
|
+
)
|
|
1420
|
+
_escalate_drain(escalation, reconcile_ok=reconcile_ok, reconcile_detail=reconcile_detail)
|
|
1421
|
+
outcome.escalated.append({
|
|
1422
|
+
**escalation.to_dict(),
|
|
1423
|
+
"reconcile_ok": reconcile_ok,
|
|
1424
|
+
"reconcile_detail": reconcile_detail,
|
|
1425
|
+
})
|
|
1310
1426
|
|
|
1311
1427
|
return outcome.to_dict()
|
|
1312
1428
|
|
|
@@ -1321,7 +1437,9 @@ DRAIN_ALERT_ISSUE = 0
|
|
|
1321
1437
|
DRAIN_ALERT_STAGE = "release-cordon"
|
|
1322
1438
|
|
|
1323
1439
|
|
|
1324
|
-
def _escalate_drain(
|
|
1440
|
+
def _escalate_drain(
|
|
1441
|
+
escalation, *, reconcile_ok: bool | None = None, reconcile_detail: str = ""
|
|
1442
|
+
) -> None:
|
|
1325
1443
|
"""Surface a host that will not drain — loudly, in three places.
|
|
1326
1444
|
|
|
1327
1445
|
stderr (the timer's journal), the escalation table (the TUI and
|
|
@@ -1329,21 +1447,43 @@ def _escalate_drain(escalation) -> None:
|
|
|
1329
1447
|
criterion 4 is explicitly about the surfaced MESSAGE rather than an
|
|
1330
1448
|
internal state change, because a silent forever-wait is the failure this
|
|
1331
1449
|
whole mechanism replaces.
|
|
1450
|
+
|
|
1451
|
+
#2373: *reconcile_ok*/*reconcile_detail* are the outcome of the remote
|
|
1452
|
+
reconcile-only tick `_apply_cordons` asked the escalated host's own
|
|
1453
|
+
agent to run just before calling this — ``None`` when that call was
|
|
1454
|
+
never attempted (no fleet topology / agent port available), so the
|
|
1455
|
+
message stays byte-identical to before #2373 in that case. When it WAS
|
|
1456
|
+
attempted, the outcome is folded into the same message rather than a
|
|
1457
|
+
second alert, so an operator reading one escalation sees both "this is
|
|
1458
|
+
overdue" and "here is what the self-heal attempt already found" without
|
|
1459
|
+
correlating two records.
|
|
1332
1460
|
"""
|
|
1333
|
-
|
|
1461
|
+
reconcile_note = ""
|
|
1462
|
+
if reconcile_ok is not None:
|
|
1463
|
+
verb = "ok" if reconcile_ok else "failed"
|
|
1464
|
+
detail = f" ({reconcile_detail})" if reconcile_detail else ""
|
|
1465
|
+
reconcile_note = (
|
|
1466
|
+
f" — asked {escalation.machine}'s own agent to run a local "
|
|
1467
|
+
f"reconcile-only tick first (#2373): {verb}{detail}"
|
|
1468
|
+
)
|
|
1469
|
+
message = f"{escalation.message}{reconcile_note}"
|
|
1470
|
+
click.echo(f" ! {message}", err=True)
|
|
1334
1471
|
try:
|
|
1335
1472
|
from coord.state import record_drive_escalation # noqa: PLC0415
|
|
1336
1473
|
|
|
1474
|
+
gate_readings = (
|
|
1475
|
+
f"machine={escalation.machine} | "
|
|
1476
|
+
f"waited={escalation.waited_seconds:.0f}s | "
|
|
1477
|
+
f"deadline={escalation.deadline_seconds:.0f}s"
|
|
1478
|
+
)
|
|
1479
|
+
if reconcile_ok is not None:
|
|
1480
|
+
gate_readings += f" | remote_reconcile={'ok' if reconcile_ok else 'failed'}"
|
|
1337
1481
|
record_drive_escalation(
|
|
1338
1482
|
DRAIN_ALERT_REPO,
|
|
1339
1483
|
DRAIN_ALERT_ISSUE,
|
|
1340
1484
|
stage=DRAIN_ALERT_STAGE,
|
|
1341
|
-
reason=
|
|
1342
|
-
gate_readings=
|
|
1343
|
-
f"machine={escalation.machine} | "
|
|
1344
|
-
f"waited={escalation.waited_seconds:.0f}s | "
|
|
1345
|
-
f"deadline={escalation.deadline_seconds:.0f}s"
|
|
1346
|
-
),
|
|
1485
|
+
reason=message,
|
|
1486
|
+
gate_readings=gate_readings,
|
|
1347
1487
|
proposed_command=escalation.command,
|
|
1348
1488
|
)
|
|
1349
1489
|
except Exception as exc: # noqa: BLE001 — the stderr line above is the
|
|
@@ -2181,24 +2321,19 @@ def _run_reconcile_tick(config_path: Path, *, runner=None) -> tuple[bool, str]:
|
|
|
2181
2321
|
*after* the timer stopped would stay stuck ``running`` for the rest of
|
|
2182
2322
|
the drain no matter how generous the deadline is — the exact deadlock
|
|
2183
2323
|
#2110 fixed reconciliation to no longer require the timer for.
|
|
2324
|
+
|
|
2325
|
+
Thin wrapper around :func:`coord.reconcile_tick.run_reconcile_tick`, the
|
|
2326
|
+
#2373-extracted shared implementation also used by
|
|
2327
|
+
`AgentServer.reconcile_drive_queue` (`coord/agent.py`) — see that
|
|
2328
|
+
module's docstring for why there must be exactly one implementation of
|
|
2329
|
+
"what a reconcile-only tick does". A failure here is not fatal on its
|
|
2330
|
+
own: the quiescence check right after this call is the real signal a
|
|
2331
|
+
stuck reconcile eventually clears on a later poll, not this one call's
|
|
2332
|
+
job to guarantee.
|
|
2184
2333
|
"""
|
|
2185
|
-
import
|
|
2334
|
+
from coord.reconcile_tick import run_reconcile_tick # noqa: PLC0415
|
|
2186
2335
|
|
|
2187
|
-
|
|
2188
|
-
try:
|
|
2189
|
-
proc = run(
|
|
2190
|
-
[sys.executable, "-m", "coord.cli", "drive-queue", "tick",
|
|
2191
|
-
"--reconcile-only", "--config", str(config_path)],
|
|
2192
|
-
capture_output=True, text=True, timeout=120,
|
|
2193
|
-
)
|
|
2194
|
-
except Exception as exc: # noqa: BLE001 — best effort; the quiescence
|
|
2195
|
-
# check right after this call is the real signal a stuck reconcile
|
|
2196
|
-
# eventually clears on a later poll, not this one call's job to
|
|
2197
|
-
# guarantee.
|
|
2198
|
-
return False, f"{type(exc).__name__}: {exc}"
|
|
2199
|
-
ok = getattr(proc, "returncode", 1) == 0
|
|
2200
|
-
detail = (getattr(proc, "stderr", "") or getattr(proc, "stdout", "") or "").strip()
|
|
2201
|
-
return ok, detail[:200]
|
|
2336
|
+
return run_reconcile_tick(config_path, timeout=120, detail_limit=200, runner=runner)
|
|
2202
2337
|
|
|
2203
2338
|
|
|
2204
2339
|
def _drain(
|
|
@@ -108,7 +108,11 @@ from coord.interactive import (
|
|
|
108
108
|
tmux_session_alive,
|
|
109
109
|
)
|
|
110
110
|
from coord.dead_end import DeadEnd, detect_dead_end
|
|
111
|
-
from coord.failure_class import
|
|
111
|
+
from coord.failure_class import (
|
|
112
|
+
classify_failure,
|
|
113
|
+
environmental_backoff_secs,
|
|
114
|
+
plan_usage_limit_resume,
|
|
115
|
+
)
|
|
112
116
|
from coord.models import DELIVERABLE_ANALYSIS_LABEL, POLICY_REFUSAL_MARKER
|
|
113
117
|
from coord.usage_limits import PlanLimits, evaluate_usage_gate, get_plan_limits
|
|
114
118
|
# Lost in the #1584-onto-#1590 rebase: _decide_review() calls this, but the
|
|
@@ -201,6 +205,19 @@ class DriveError(Exception):
|
|
|
201
205
|
# untruncated bytes for local, on-host debugging.
|
|
202
206
|
_CAPTURED_OUTPUT_LIMIT = 4000
|
|
203
207
|
|
|
208
|
+
# #2360: attempt budget for a WORK-stage failure `coord.failure_class.
|
|
209
|
+
# classify_failure` calls environmental (a Claude API 5xx, a dropped
|
|
210
|
+
# connection, an overload — the module's own allow-listed signals), as
|
|
211
|
+
# opposed to `DriveOptions.max_work_retries` (default 1: one retry, two
|
|
212
|
+
# attempts total), which stays the tight budget for a genuine code defect.
|
|
213
|
+
# #2335: a work assignment died on an auth hiccup, its one flat retry died
|
|
214
|
+
# too, and the drive-queue entry sat `blocked` for ~19h — confirmed
|
|
215
|
+
# transient after the fact (the same machine ran dozens of clean sessions in
|
|
216
|
+
# that window). `max()` against `opts.max_work_retries` at the call site
|
|
217
|
+
# means a run configured with a bigger flat budget than this default is
|
|
218
|
+
# never *tightened* for the environmental case.
|
|
219
|
+
_ENVIRONMENTAL_WORK_RETRY_BUDGET = 5
|
|
220
|
+
|
|
204
221
|
|
|
205
222
|
def _bounded_tail(text: str, limit: int = _CAPTURED_OUTPUT_LIMIT) -> str:
|
|
206
223
|
"""*text*, or its last *limit* characters if longer — the tail, because
|
|
@@ -264,6 +281,15 @@ class DriveCounters:
|
|
|
264
281
|
"""Bounds on every retry loop. Unbounded merge retries was a real bug."""
|
|
265
282
|
|
|
266
283
|
work_retries: int = 0
|
|
284
|
+
# #2360: one-shot latch for the environmental WORK-stage backoff — the
|
|
285
|
+
# 1-based attempt number (`work_retries + 1`) `_decide_work` has already
|
|
286
|
+
# returned a backoff WAIT for. `-1` means "no backoff pending". Mirrors
|
|
287
|
+
# `review_fix_dispatched_for`'s shape below: without it, a board that
|
|
288
|
+
# hasn't changed yet (nothing was dispatched during the wait) would make
|
|
289
|
+
# `decide()` re-issue the SAME backoff WAIT forever instead of, once the
|
|
290
|
+
# sleep it already returned has elapsed, falling through to the actual
|
|
291
|
+
# `coord retry` for that attempt.
|
|
292
|
+
work_environmental_backoff_attempt: int = -1
|
|
267
293
|
# ONE budget for BOTH fix arms (#1692): a failed test and a
|
|
268
294
|
# request-changes review are two shapes of the same "the work needs
|
|
269
295
|
# another round" loop, and a drive that spends three rounds bouncing
|
|
@@ -1507,13 +1533,25 @@ def decide(
|
|
|
1507
1533
|
|
|
1508
1534
|
# ---- work failed: bounded retry ----------------------------------------
|
|
1509
1535
|
if state.work_status == "failed":
|
|
1510
|
-
|
|
1511
|
-
|
|
1512
|
-
|
|
1513
|
-
|
|
1514
|
-
|
|
1515
|
-
|
|
1516
|
-
|
|
1536
|
+
# #1590 part 6: name the actual cause. "failed 3 retries in: <prose>"
|
|
1537
|
+
# sent the morning triage looking at the work even when the provider
|
|
1538
|
+
# was the problem; the class is now stated up front.
|
|
1539
|
+
classification = classify_failure(
|
|
1540
|
+
failure_reason=state.work_failure_reason or None
|
|
1541
|
+
)
|
|
1542
|
+
# #2360: an environmental failure (already established NOT a usage
|
|
1543
|
+
# limit — that branch returned above) gets a wider budget than a
|
|
1544
|
+
# genuine code defect, reusing the same classifier the usage-limit
|
|
1545
|
+
# check just above already trusts. A NON-environmental failure keeps
|
|
1546
|
+
# today's flat `opts.max_work_retries` budget completely unchanged —
|
|
1547
|
+
# this is not a general increase to retry counts, only a widening
|
|
1548
|
+
# scoped to `classification.is_environmental`.
|
|
1549
|
+
budget = (
|
|
1550
|
+
max(opts.max_work_retries, _ENVIRONMENTAL_WORK_RETRY_BUDGET)
|
|
1551
|
+
if classification.is_environmental
|
|
1552
|
+
else opts.max_work_retries
|
|
1553
|
+
)
|
|
1554
|
+
if counters.work_retries >= budget:
|
|
1517
1555
|
return _die(
|
|
1518
1556
|
f"work {state.work_aid} failed {counters.work_retries} retr(ies) in: "
|
|
1519
1557
|
f"{state.work_failure_reason or 'no reason recorded'}\n"
|
|
@@ -1521,12 +1559,35 @@ def decide(
|
|
|
1521
1559
|
f" inspect: coord log {state.work_aid} --machine "
|
|
1522
1560
|
f"{state.work_machine or machine}"
|
|
1523
1561
|
)
|
|
1524
|
-
counters.work_retries
|
|
1562
|
+
attempt = counters.work_retries + 1
|
|
1563
|
+
if (
|
|
1564
|
+
classification.is_environmental
|
|
1565
|
+
and counters.work_environmental_backoff_attempt != attempt
|
|
1566
|
+
):
|
|
1567
|
+
# Back off ONCE per attempt number before spending it (the same
|
|
1568
|
+
# `environmental_backoff_secs` exponential curve #1590/#2275
|
|
1569
|
+
# proved for the Test-stage worker-death path) — the latch means
|
|
1570
|
+
# the NEXT poll, once this sleep has actually elapsed, falls
|
|
1571
|
+
# through to the real `coord retry` below instead of returning
|
|
1572
|
+
# the same backoff WAIT forever against a board that has not
|
|
1573
|
+
# changed (nothing was dispatched during the wait).
|
|
1574
|
+
counters.work_environmental_backoff_attempt = attempt
|
|
1575
|
+
wait = environmental_backoff_secs(attempt)
|
|
1576
|
+
return Action(
|
|
1577
|
+
kind=WAIT,
|
|
1578
|
+
label=(
|
|
1579
|
+
f"WORK: {state.work_aid} failed environmentally — "
|
|
1580
|
+
f"backing off {int(wait)}s before retry {attempt}/{budget}"
|
|
1581
|
+
),
|
|
1582
|
+
sleep_after=wait,
|
|
1583
|
+
warnings=(f"{classification.reason} (#2360)",),
|
|
1584
|
+
)
|
|
1585
|
+
counters.work_retries = attempt
|
|
1525
1586
|
return Action(
|
|
1526
1587
|
kind=RUN,
|
|
1527
1588
|
label=(
|
|
1528
1589
|
f"WORK: failed → coord retry {state.work_aid} "
|
|
1529
|
-
f"(attempt {counters.work_retries}/{
|
|
1590
|
+
f"(attempt {counters.work_retries}/{budget})"
|
|
1530
1591
|
),
|
|
1531
1592
|
command=("retry", state.work_aid),
|
|
1532
1593
|
error_message=f"coord retry failed for {state.work_aid}",
|