code-coordinator 0.5.150__tar.gz → 0.5.154__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.150 → code_coordinator-0.5.154}/PKG-INFO +1 -1
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/code_coordinator.egg-info/PKG-INFO +1 -1
- code_coordinator-0.5.154/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/drive_queue.py +54 -10
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/release.py +14 -2
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/drive_queue.py +13 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_drive_queue.py +59 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_release_propagate.py +92 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_drive_queue.py +110 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_release_propagate.py +33 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/data.rs +13 -1
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/dialogs.rs +147 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/doc_tabs.rs +8 -7
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/events.rs +103 -2
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/fixtures.rs +1 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/format.rs +30 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/mod.rs +21 -1
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/pipeline.rs +300 -20
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/render.rs +97 -3
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/sidebar.rs +2 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/tests.rs +305 -38
- code_coordinator-0.5.150/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.github/workflows/acceptance-web.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/.gitignore +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/CLAUDE.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/GOAL.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/LICENSE +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/MANIFEST.in +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/README.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/__init__.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/agent.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/audit.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/block_log.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/board_service.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/brain.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/claim.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/cli.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/client.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/comments.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/config.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/config_reload.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dao.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/assets/Gallery-BoKs3mpY.js +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/assets/Terminal-CEsP08iX.js +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/assets/index-CDHPlB6k.js +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/db.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/deps.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/drive.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/events.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/filelock.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/freshness.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/gates.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/goal.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/context.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/models.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/render.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/health/units.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/hooks.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/interactive.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/models.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/network.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/notify.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/openapi.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/parentage.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/plans.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/progress.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/reconcile_tick.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/release_window.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/reports.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/review.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/skills/portal-followup/SKILL.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/smoke.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/split_work.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/state.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/test_author.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/test_report.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/usage.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/ADR_COORD_WEB_DIST.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/WSL_WINDOWS_WORKER.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/install-agent.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/pyproject.toml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/setup.cfg +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/__init__.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/board_tabs_2282.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/board_tabs_close_2283.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/contract.md +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/manifest.yml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/mocks/board-baseline-no-tabs.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/mocks/board-pinned-3-tabs.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/mocks/board-preview-tab.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/mocks/board-split-side-by-side.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/mocks/board-tab-context-menu.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/mocks/board-tabs-help-overlay.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/mocks/board-tabs-overflow.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/mocks/pipeline-tabs-independent.screen +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-65/pipeline_tabs_2284.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/conftest.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/opencode_run_length_sample.jsonl +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_drive_queue_reconcile_2373.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_decide.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_config.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_coord_test_runner_populated_home.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_db.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_events.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_init.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_models.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_network.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_reconcile.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_reconcile_tick.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_review.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_session.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_split.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_state.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_windows_job_is_a_real_gate_2000.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.150 → code_coordinator-0.5.154}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -71,6 +71,7 @@ from coord.drive_queue import (
|
|
|
71
71
|
find_cycle,
|
|
72
72
|
fired_holds,
|
|
73
73
|
is_permanent_block_reason,
|
|
74
|
+
is_unsatisfiable_prereq_reason,
|
|
74
75
|
parse_after_spec,
|
|
75
76
|
parse_key,
|
|
76
77
|
pending_probe_targets,
|
|
@@ -562,13 +563,31 @@ _BLOCKED_REMEDY = (
|
|
|
562
563
|
"actually fixed, not merely because a pre-req merged"
|
|
563
564
|
)
|
|
564
565
|
|
|
565
|
-
# #
|
|
566
|
-
# `
|
|
567
|
-
#
|
|
568
|
-
#
|
|
569
|
-
#
|
|
570
|
-
# `
|
|
571
|
-
#
|
|
566
|
+
# #2362: a `blocked` row (never `failed` — the tick's `after=` resume sweep,
|
|
567
|
+
# `coord.drive_queue._reconcile_blocked_after`, is scoped to `blocked` only)
|
|
568
|
+
# whose OWN `last_reason` IS `_resolve_prereqs`'s "queued but blocked/failed
|
|
569
|
+
# — it will never satisfy" verdict is auto re-checked every tick, and
|
|
570
|
+
# resumes to `waiting` on its own the moment every named pre-req lands.
|
|
571
|
+
# `_BLOCKED_REMEDY` above is flatly wrong for exactly this row shape (it is
|
|
572
|
+
# in fact re-checked, on its own, without an operator) — this note replaces
|
|
573
|
+
# it there instead of merely appending, mirroring #2230's own concern: an
|
|
574
|
+
# operator told "never re-checked" for a row about to self-resume would
|
|
575
|
+
# either do a needless remove+add or race the automatic one.
|
|
576
|
+
_BLOCKED_AFTER_NOTE = (
|
|
577
|
+
"remedy: {state}'s `after=` graph above IS re-checked automatically "
|
|
578
|
+
"every tick (#2362) — once every named pre-req lands (`facts.landed`), "
|
|
579
|
+
"this row resumes to `waiting` on its own, attempt budget reset; no "
|
|
580
|
+
"operator remove+add needed. See `resumes=` above if it has already "
|
|
581
|
+
"self-resumed and re-blocked for an unrelated reason."
|
|
582
|
+
)
|
|
583
|
+
|
|
584
|
+
# #2230: `blocked`'s MERGE GATE (as opposed to its `after=` graph, handled by
|
|
585
|
+
# `_BLOCKED_AFTER_NOTE`/`_BLOCKED_REMEDY` above) is no longer unconditionally
|
|
586
|
+
# terminal — see `coord.drive_queue.is_permanent_block_reason`/
|
|
587
|
+
# `_reconcile_blocked`. Shown only for `blocked` (never `failed`, which
|
|
588
|
+
# #2230 does not touch at all) so an operator reading `list` right after this
|
|
589
|
+
# ships doesn't have to go read the issue to learn their remove+add might be
|
|
590
|
+
# about to race an automatic resume.
|
|
572
591
|
_BLOCKED_GATE_NOTE = (
|
|
573
592
|
"note: a re-evaluable blocked cause (i.e. not a #1844/#2019 permanent "
|
|
574
593
|
"refusal) IS re-checked against the merge gate automatically (#2230) — "
|
|
@@ -693,12 +712,37 @@ def drive_queue_list(repo: str | None, output_json: bool, config_path: Path) ->
|
|
|
693
712
|
# #2183 point 4: `blocked`/`failed` is terminal — say so where the
|
|
694
713
|
# operator is already reading the row, not just in an unrelated
|
|
695
714
|
# operator's hand-written `--hold-after` note.
|
|
696
|
-
|
|
715
|
+
#
|
|
716
|
+
# #2404: EXCEPT when this row's own `last_reason` is exactly the
|
|
717
|
+
# unsatisfiable-`after=`-pre-req verdict on a `blocked` (not
|
|
718
|
+
# `failed`) entry — that shape auto-resumes on its own every tick
|
|
719
|
+
# (#2362), so the generic "never re-checked on its own" remedy
|
|
720
|
+
# would be actively wrong for it; swap in the note that says so.
|
|
721
|
+
if entry.state == STATE_BLOCKED and is_unsatisfiable_prereq_reason(
|
|
722
|
+
entry.last_reason
|
|
723
|
+
):
|
|
724
|
+
click.echo(f" {_BLOCKED_AFTER_NOTE.format(state=entry.state)}")
|
|
725
|
+
else:
|
|
726
|
+
click.echo(f" {_BLOCKED_REMEDY.format(state=entry.state)}")
|
|
697
727
|
# #2230: independent of the `after=` diagnosis above (most `blocked`
|
|
698
728
|
# rows have no `after=` at all — they blocked on attempts, not a
|
|
699
729
|
# pre-req), so gated on the row's OWN state and cause, not `diagnosed`.
|
|
700
|
-
|
|
701
|
-
|
|
730
|
+
#
|
|
731
|
+
# #2404 review: EXCLUDE the unsatisfiable-`after=`-pre-req shape
|
|
732
|
+
# `_BLOCKED_AFTER_NOTE` above already covers. #2230's sweep
|
|
733
|
+
# (`_blocked_gate_reading`) returns `None` — "no evidence" — for an
|
|
734
|
+
# entry that never reached the merge queue at all, which is exactly
|
|
735
|
+
# what a purely `after=`-caused block is; showing this note there
|
|
736
|
+
# would stack two auto-recheck notes citing two different issue
|
|
737
|
+
# numbers under one row, one of which has nothing to say about that
|
|
738
|
+
# row's actual cause. `is_permanent_block_reason` rows already skip
|
|
739
|
+
# this note on their own; this adds the sibling exclusion so the two
|
|
740
|
+
# notes stay mutually exclusive, matching what each mechanism can
|
|
741
|
+
# actually promise for a given row.
|
|
742
|
+
if (
|
|
743
|
+
entry.state == STATE_BLOCKED
|
|
744
|
+
and not is_permanent_block_reason(entry.last_reason)
|
|
745
|
+
and not is_unsatisfiable_prereq_reason(entry.last_reason)
|
|
702
746
|
):
|
|
703
747
|
click.echo(f" {_BLOCKED_GATE_NOTE}")
|
|
704
748
|
for line in _hold_lines(entry):
|
|
@@ -1070,10 +1070,22 @@ def release_propagate( # noqa: PLR0912, PLR0915 — a pipeline; the decisions a
|
|
|
1070
1070
|
gate = rp.scope_verification(record.verification, lanes=record.lanes)
|
|
1071
1071
|
record.gate = gate.to_dict()
|
|
1072
1072
|
for finding in gate.advisory:
|
|
1073
|
+
host = finding.get("host")
|
|
1074
|
+
# #2403: elitebook sat on 0.5.146 (expected 0.5.148) for the length
|
|
1075
|
+
# of a cordon's full lifetime with this line as the ONLY signal an
|
|
1076
|
+
# operator got — "fix by hand" with no hand to follow. When the
|
|
1077
|
+
# finding names a host, name the two commands that actually clear
|
|
1078
|
+
# it, so nobody has to derive them from scratch under time pressure.
|
|
1079
|
+
remedy = (
|
|
1080
|
+
f" — run `coord agent update --machine {host}` then "
|
|
1081
|
+
f"`coord release cordon --clear {host}`"
|
|
1082
|
+
if host
|
|
1083
|
+
else ""
|
|
1084
|
+
)
|
|
1073
1085
|
click.echo(
|
|
1074
|
-
f" ~ advisory [{finding.get('severity')}] {
|
|
1086
|
+
f" ~ advisory [{finding.get('severity')}] {host} "
|
|
1075
1087
|
f"{finding.get('lane')}: {finding.get('summary')} "
|
|
1076
|
-
"— outside propagation's reach, fix by hand",
|
|
1088
|
+
f"— outside propagation's reach, fix by hand{remedy}",
|
|
1077
1089
|
err=True,
|
|
1078
1090
|
)
|
|
1079
1091
|
if gate.unrollable:
|
|
@@ -1600,6 +1600,19 @@ def _is_unsatisfiable_prereq_reason(text: str | None) -> bool:
|
|
|
1600
1600
|
return bool(text) and _UNSATISFIABLE_PREREQ_MARKER in text
|
|
1601
1601
|
|
|
1602
1602
|
|
|
1603
|
+
def is_unsatisfiable_prereq_reason(text: str | None) -> bool:
|
|
1604
|
+
"""Public alias for :func:`_is_unsatisfiable_prereq_reason`.
|
|
1605
|
+
|
|
1606
|
+
`coord drive-queue list`'s rendering (#2404) needs to tell whether a
|
|
1607
|
+
`blocked` row's frozen ``last_reason`` is the exact shape
|
|
1608
|
+
:func:`_reconcile_blocked_after` (#2362) auto-resumes once every named
|
|
1609
|
+
pre-req lands, so it can stop telling the operator the ``after=`` graph
|
|
1610
|
+
"is never re-checked on its own" for a row where that has stopped being
|
|
1611
|
+
true — see ``coord.commands.drive_queue._BLOCKED_AFTER_NOTE``.
|
|
1612
|
+
"""
|
|
1613
|
+
return _is_unsatisfiable_prereq_reason(text)
|
|
1614
|
+
|
|
1615
|
+
|
|
1603
1616
|
def _reconcile_blocked_after(
|
|
1604
1617
|
entry: QueueEntry,
|
|
1605
1618
|
board: BoardView,
|
|
@@ -692,6 +692,65 @@ def test_blocked_row_purely_by_an_unsatisfiable_prereq_is_unchanged(cli, seed):
|
|
|
692
692
|
assert dep_reason in result.output
|
|
693
693
|
|
|
694
694
|
|
|
695
|
+
def test_blocked_row_purely_by_an_unsatisfiable_prereq_gets_the_2362_note(
|
|
696
|
+
cli, seed
|
|
697
|
+
):
|
|
698
|
+
"""#2404: unlike a `blocked` row whose own cause is unrelated to its
|
|
699
|
+
`after=` graph (genuinely "never re-checked on its own" — see the #542
|
|
700
|
+
control case above), a row blocked purely because a named pre-req is
|
|
701
|
+
itself `blocked`/`failed` DOES get re-checked automatically every tick
|
|
702
|
+
(#2362): the moment that pre-req lands, this row resumes to `waiting` on
|
|
703
|
+
its own. `list`'s remedy line must say so instead of sending an operator
|
|
704
|
+
to a needless (or racing) manual `remove`+`add`."""
|
|
705
|
+
seed(issues={1650: "open"})
|
|
706
|
+
# 1650: blocked for its own, unrelated reason — nothing re-checks this.
|
|
707
|
+
cli("add", REPO, "1650")
|
|
708
|
+
state._update_drive_queue_entry_local(
|
|
709
|
+
REPO, 1650, state="blocked", last_reason="drive session died"
|
|
710
|
+
)
|
|
711
|
+
# 1654 (the #492 shape): blocked ONLY because its pre-req (1650) is
|
|
712
|
+
# itself blocked — the exact shape #2362's tick sweep auto-resumes.
|
|
713
|
+
cli("add", REPO, "1654", "--after", "1650")
|
|
714
|
+
dep_reason = f"pre-req {REPO}#1650 is queued but blocked — it will never satisfy"
|
|
715
|
+
state._update_drive_queue_entry_local(
|
|
716
|
+
REPO, 1654, state="blocked", last_reason=dep_reason
|
|
717
|
+
)
|
|
718
|
+
|
|
719
|
+
result = cli("list")
|
|
720
|
+
assert result.exit_code == 0, result.output
|
|
721
|
+
|
|
722
|
+
# 1650 has no `after=` at all, so #2183's diagnosis (and any remedy
|
|
723
|
+
# line) never applies to it — nothing to assert there beyond it existing.
|
|
724
|
+
assert _row_for(result.output, f"{REPO}#1650")
|
|
725
|
+
|
|
726
|
+
# Split the transcript at 1654's own row header — 1654 is the last
|
|
727
|
+
# (only remaining) row, so everything from there on is exactly ITS
|
|
728
|
+
# block (summary/last:/note lines), never 1650's.
|
|
729
|
+
idx_1654 = result.output.index(f"{REPO}#1654")
|
|
730
|
+
block_1650 = result.output[:idx_1654]
|
|
731
|
+
block_1654 = result.output[idx_1654:]
|
|
732
|
+
|
|
733
|
+
# 1654's remedy line is the new #2362 note, not the stale "never
|
|
734
|
+
# re-checked on its own" advice — this row auto-resumes without an
|
|
735
|
+
# operator.
|
|
736
|
+
assert "IS re-checked automatically every tick (#2362)" in block_1654
|
|
737
|
+
assert "no operator remove+add needed" in block_1654
|
|
738
|
+
assert "never re-checked on its own" not in block_1654
|
|
739
|
+
|
|
740
|
+
# #2404 review (non-blocking finding): #2230's merge-gate note must NOT
|
|
741
|
+
# also print for this row. `_blocked_gate_reading` returns `None` — no
|
|
742
|
+
# evidence — for an entry that never reached the merge queue, which is
|
|
743
|
+
# exactly what a purely `after=`-caused block is; showing it here would
|
|
744
|
+
# stack two auto-recheck notes citing two different issue numbers under
|
|
745
|
+
# one row, one of which has nothing to say about this row's real cause.
|
|
746
|
+
assert "re-checked against the merge gate automatically (#2230)" not in block_1654
|
|
747
|
+
|
|
748
|
+
# …but an ordinary blocked row whose cause is unrelated to its `after=`
|
|
749
|
+
# graph (1650, blocked on "drive session died") still gets #2230's note
|
|
750
|
+
# exactly as before — this exclusion is scoped to the #2362 shape only.
|
|
751
|
+
assert "re-checked against the merge gate automatically (#2230)" in block_1650
|
|
752
|
+
|
|
753
|
+
|
|
695
754
|
def test_list_with_no_after_is_unaffected_by_the_2183_diagnosis(cli):
|
|
696
755
|
"""A `blocked` entry that never declared any `after=` at all keeps
|
|
697
756
|
rendering exactly as it always has — no board dependency, no remedy
|
|
@@ -847,6 +847,57 @@ def test_a_green_roll_is_verified_and_journalled(valid_config_path, state_dir,
|
|
|
847
847
|
assert record["verification"]["severity"] == "ok"
|
|
848
848
|
|
|
849
849
|
|
|
850
|
+
def test_a_waiting_between_legs_entry_rolls_its_host_normally(
|
|
851
|
+
valid_config_path, state_dir, no_network, monkeypatch
|
|
852
|
+
):
|
|
853
|
+
"""#2403, end to end: `laptop`'s only queue entry is `waiting` — deferred
|
|
854
|
+
by an unrelated repo-capacity cap (#1972), exactly `claude-coordinator
|
|
855
|
+
#2005`'s live shape on 2026-08-18 — with a terminal assignment recording
|
|
856
|
+
`laptop` as its last worker. #2240's "last known host" fallback exists
|
|
857
|
+
for a `running` between-legs row; it must not reach a `waiting` one. A
|
|
858
|
+
genuinely idle `laptop` has to roll and verify like any other free host,
|
|
859
|
+
not sit deferred and cordoned on the strength of a queue row that never
|
|
860
|
+
launched anything."""
|
|
861
|
+
monkeypatch.setattr(
|
|
862
|
+
release_cmd, "_fetch_board",
|
|
863
|
+
lambda: (
|
|
864
|
+
{
|
|
865
|
+
"drive_queue": [
|
|
866
|
+
{"repo_name": "api", "issue_number": 2005,
|
|
867
|
+
"state": "waiting", "deferrals": 3, "attempts": 2},
|
|
868
|
+
],
|
|
869
|
+
"assignments": [
|
|
870
|
+
{"repo_name": "api", "issue_number": 2005,
|
|
871
|
+
"machine_name": "laptop", "status": "COMPLETED",
|
|
872
|
+
"dispatched_at": 100.0},
|
|
873
|
+
],
|
|
874
|
+
},
|
|
875
|
+
None,
|
|
876
|
+
),
|
|
877
|
+
)
|
|
878
|
+
calls = _stub_lanes(monkeypatch)
|
|
879
|
+
_stub_verify(monkeypatch, versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
|
|
880
|
+
daemon="server")
|
|
881
|
+
result = CliRunner().invoke(
|
|
882
|
+
main,
|
|
883
|
+
["release", "propagate", "--config", str(valid_config_path),
|
|
884
|
+
"--target", "0.4.111"],
|
|
885
|
+
)
|
|
886
|
+
assert result.exit_code == 0, result.output
|
|
887
|
+
assert rp.STATUS_DEFERRED not in result.output
|
|
888
|
+
assert any(host == "laptop" for _lane, host in calls), (
|
|
889
|
+
"a waiting queue row must never defer the host it names as its "
|
|
890
|
+
"last known worker"
|
|
891
|
+
)
|
|
892
|
+
record = _records(state_dir)[0]
|
|
893
|
+
assert record["status"] == rp.STATUS_VERIFIED
|
|
894
|
+
assert not any(
|
|
895
|
+
l["host"] == "laptop" and l["lane"] == "-" for l in record["lanes"]
|
|
896
|
+
)
|
|
897
|
+
# Nothing is left cordoned behind a row that was never actually running.
|
|
898
|
+
assert mp.cordoned_names() == set()
|
|
899
|
+
|
|
900
|
+
|
|
850
901
|
def test_a_red_verification_rolls_every_updated_host_back(valid_config_path, state_dir,
|
|
851
902
|
no_network, monkeypatch):
|
|
852
903
|
"""#1835: 'a red post-deploy verification must roll back, not just
|
|
@@ -1221,6 +1272,47 @@ def test_2026_08_09_a_good_roll_is_not_reverted_by_lanes_it_cannot_roll(
|
|
|
1221
1272
|
assert "advisory" in result.output
|
|
1222
1273
|
|
|
1223
1274
|
|
|
1275
|
+
def test_the_outside_reach_message_names_the_manual_remedy(
|
|
1276
|
+
valid_config_path, state_dir, no_network, monkeypatch
|
|
1277
|
+
):
|
|
1278
|
+
"""#2403: elitebook sat behind for the length of a cordon's lifetime with
|
|
1279
|
+
only `"outside propagation's reach, fix by hand"` as its signal — no
|
|
1280
|
+
remedy, just an instruction to invent one under time pressure. A
|
|
1281
|
+
finding that names a host must name the two commands that actually fix
|
|
1282
|
+
it: `coord agent update --machine <host>` and `coord release cordon
|
|
1283
|
+
--clear <host>`."""
|
|
1284
|
+
from coord import release_verify as rv
|
|
1285
|
+
|
|
1286
|
+
# `laptop` has a live assignment, so its python lane is deferred (never
|
|
1287
|
+
# attempted) this run — exactly why its own version-mismatch finding
|
|
1288
|
+
# lands as advisory rather than blocking (#2052's `attempted_scope`).
|
|
1289
|
+
monkeypatch.setattr(
|
|
1290
|
+
release_cmd, "_fetch_board",
|
|
1291
|
+
lambda: ({"assignments": [{"machine_name": "laptop", "issue_number": 9,
|
|
1292
|
+
"status": "RUNNING"}]}, None),
|
|
1293
|
+
)
|
|
1294
|
+
_stub_lanes(monkeypatch)
|
|
1295
|
+
_stub_verify(
|
|
1296
|
+
monkeypatch,
|
|
1297
|
+
versions={"laptop": ["0.4.110"], "server": ["0.4.110"]},
|
|
1298
|
+
daemon="server",
|
|
1299
|
+
findings=[
|
|
1300
|
+
rv.Finding(severity="crit", host="laptop",
|
|
1301
|
+
lane="~/.coord-venv (laptop)",
|
|
1302
|
+
summary="on 0.4.104, expected 0.4.111"),
|
|
1303
|
+
],
|
|
1304
|
+
)
|
|
1305
|
+
result = CliRunner().invoke(
|
|
1306
|
+
main,
|
|
1307
|
+
["release", "propagate", "--config", str(valid_config_path),
|
|
1308
|
+
"--target", "0.4.111"],
|
|
1309
|
+
)
|
|
1310
|
+
assert result.exit_code == 0, result.output
|
|
1311
|
+
assert "outside propagation's reach, fix by hand" in result.output
|
|
1312
|
+
assert "coord agent update --machine laptop" in result.output
|
|
1313
|
+
assert "coord release cordon --clear laptop" in result.output
|
|
1314
|
+
|
|
1315
|
+
|
|
1224
1316
|
def test_a_crit_on_a_lane_this_run_rolled_still_reverts(valid_config_path, state_dir,
|
|
1225
1317
|
no_network, monkeypatch):
|
|
1226
1318
|
"""Scoping the gate is not removing it."""
|
|
@@ -2433,6 +2433,116 @@ def test_a_permanently_blocked_entry_is_not_resumed_even_once_its_after_lands():
|
|
|
2433
2433
|
assert plan.launch is None
|
|
2434
2434
|
|
|
2435
2435
|
|
|
2436
|
+
# ── #2404 review: a CHAINED (two-hop) after= block, not just single-hop ────
|
|
2437
|
+
#
|
|
2438
|
+
# The live incident this issue is about (claude-coordinator#2284-#2288) was
|
|
2439
|
+
# never a single `after=` edge: #2284-#2288 all declared `after=2283`, and
|
|
2440
|
+
# #2283 was ITSELF `blocked` on `after=2282` — a two-hop chain (root 2282 ->
|
|
2441
|
+
# middle 2283 -> leaf 2284..2288), not the one-hop shape every test above
|
|
2442
|
+
# pins. `_reconcile_blocked_after`'s resume check is driven entirely by
|
|
2443
|
+
# `board.facts(dep).landed` — a real, board-derived merge fact, never by a
|
|
2444
|
+
# dependency's in-tick `states` entry — so in principle each hop should
|
|
2445
|
+
# resolve independently the moment ITS OWN named pre-req actually lands,
|
|
2446
|
+
# with no special-casing needed for the chain shape. These two tests are the
|
|
2447
|
+
# repro the review asked for: they exercise `plan_tick` against an actual
|
|
2448
|
+
# two-hop graph to confirm that holds (it does), and pin the one subtlety a
|
|
2449
|
+
# naive "chain" fix could get wrong — a leaf must not resume just because
|
|
2450
|
+
# its immediate pre-req was ITSELF re-queued to `waiting` this same tick;
|
|
2451
|
+
# only that pre-req actually landing (merged/closed) may resume the leaf.
|
|
2452
|
+
|
|
2453
|
+
|
|
2454
|
+
def test_a_two_hop_after_chain_resumes_in_one_tick_once_both_hops_have_landed():
|
|
2455
|
+
"""The exact live-incident shape: by the time anyone looked, BOTH the
|
|
2456
|
+
root (2282-analog) and the middle (2283-analog) pre-reqs had already
|
|
2457
|
+
merged — the middle's queue row just hadn't been reconciled yet. A
|
|
2458
|
+
single tick must resolve the WHOLE chain: the middle reconciles to
|
|
2459
|
+
`done` via #2055's landed check, and the leaf (2284..2288-analog),
|
|
2460
|
+
reading the middle's REAL board fact rather than its stale on-disk
|
|
2461
|
+
`blocked` state, resumes to `waiting` in that same tick — no operator
|
|
2462
|
+
action, and no second tick needed once both merges are real."""
|
|
2463
|
+
root = entry_key(REPO, 1650)
|
|
2464
|
+
middle = entry_key(REPO, 1654)
|
|
2465
|
+
entries = [
|
|
2466
|
+
entry(1650, position=0, state=STATE_DONE),
|
|
2467
|
+
entry(
|
|
2468
|
+
1654,
|
|
2469
|
+
position=1,
|
|
2470
|
+
after=(root,),
|
|
2471
|
+
state=STATE_BLOCKED,
|
|
2472
|
+
attempts=2,
|
|
2473
|
+
last_reason=f"pre-req {root} is queued but blocked — it will never satisfy",
|
|
2474
|
+
),
|
|
2475
|
+
entry(
|
|
2476
|
+
1658,
|
|
2477
|
+
position=2,
|
|
2478
|
+
after=(middle,),
|
|
2479
|
+
state=STATE_BLOCKED,
|
|
2480
|
+
attempts=1,
|
|
2481
|
+
last_reason=f"pre-req {middle} is queued but blocked — it will never satisfy",
|
|
2482
|
+
),
|
|
2483
|
+
]
|
|
2484
|
+
# Both the root AND the middle have actually merged — mirrors the live
|
|
2485
|
+
# incident, where #2283 (middle) itself showed `done — issue already
|
|
2486
|
+
# merged while blocked (#2055)` once anyone looked.
|
|
2487
|
+
plan = plan_tick(entries, board(merged=(1650, 1654)), capacity=3)
|
|
2488
|
+
|
|
2489
|
+
middle_reconcile = next(r for r in plan.reconciles if r.key == middle)
|
|
2490
|
+
assert middle_reconcile.outcome == "done"
|
|
2491
|
+
assert middle_reconcile.updates["state"] == STATE_DONE
|
|
2492
|
+
|
|
2493
|
+
leaf_reconcile = next(r for r in plan.reconciles if r.key == entry_key(REPO, 1658))
|
|
2494
|
+
assert leaf_reconcile.outcome == "resumed"
|
|
2495
|
+
assert leaf_reconcile.updates["state"] == STATE_WAITING
|
|
2496
|
+
assert leaf_reconcile.updates["attempts"] == 0
|
|
2497
|
+
assert leaf_reconcile.updates["resumes"] == 1
|
|
2498
|
+
|
|
2499
|
+
# …and, exactly like the single-hop case, the freshly-resumed leaf falls
|
|
2500
|
+
# straight into this SAME tick's launch selection.
|
|
2501
|
+
assert plan.launch is not None and plan.launch.issue == 1658
|
|
2502
|
+
|
|
2503
|
+
|
|
2504
|
+
def test_a_two_hop_after_chain_leaf_is_not_resumed_until_its_own_pre_req_lands():
|
|
2505
|
+
"""Guard against the false-resume a naive "propagate through `states`"
|
|
2506
|
+
chain fix would introduce: once the root lands, the middle correctly
|
|
2507
|
+
resumes to `waiting` THIS tick (single-hop #2362 behaviour) — but the
|
|
2508
|
+
leaf's own named pre-req is the MIDDLE, which has only been re-queued,
|
|
2509
|
+
not merged. The leaf must stay `blocked` until the middle itself
|
|
2510
|
+
actually lands, even though `states[middle]` already reads `waiting` by
|
|
2511
|
+
the time the leaf is walked in this same tick."""
|
|
2512
|
+
root = entry_key(REPO, 1650)
|
|
2513
|
+
middle = entry_key(REPO, 1654)
|
|
2514
|
+
entries = [
|
|
2515
|
+
entry(1650, position=0, state=STATE_DONE),
|
|
2516
|
+
entry(
|
|
2517
|
+
1654,
|
|
2518
|
+
position=1,
|
|
2519
|
+
after=(root,),
|
|
2520
|
+
state=STATE_BLOCKED,
|
|
2521
|
+
attempts=2,
|
|
2522
|
+
last_reason=f"pre-req {root} is queued but blocked — it will never satisfy",
|
|
2523
|
+
),
|
|
2524
|
+
entry(
|
|
2525
|
+
1658,
|
|
2526
|
+
position=2,
|
|
2527
|
+
after=(middle,),
|
|
2528
|
+
state=STATE_BLOCKED,
|
|
2529
|
+
attempts=1,
|
|
2530
|
+
last_reason=f"pre-req {middle} is queued but blocked — it will never satisfy",
|
|
2531
|
+
),
|
|
2532
|
+
]
|
|
2533
|
+
# Only the root has landed — the middle has not (it is only about to be
|
|
2534
|
+
# re-queued to `waiting` THIS tick, not merged).
|
|
2535
|
+
plan = plan_tick(entries, board(merged=(1650,)), capacity=3)
|
|
2536
|
+
|
|
2537
|
+
middle_reconcile = next(r for r in plan.reconciles if r.key == middle)
|
|
2538
|
+
assert middle_reconcile.outcome == "resumed"
|
|
2539
|
+
assert middle_reconcile.updates["state"] == STATE_WAITING
|
|
2540
|
+
|
|
2541
|
+
# The leaf gets NO reconcile at all this tick — it stays blocked, with
|
|
2542
|
+
# its existing (still-true) "it will never satisfy" reason untouched.
|
|
2543
|
+
assert all(r.key != entry_key(REPO, 1658) for r in plan.reconciles)
|
|
2544
|
+
|
|
2545
|
+
|
|
2436
2546
|
def test_is_unsatisfiable_prereq_reason_recognises_only_the_exact_verdict_shape():
|
|
2437
2547
|
from coord.drive_queue import _is_unsatisfiable_prereq_reason
|
|
2438
2548
|
|
|
@@ -332,6 +332,39 @@ def test_an_unpinned_entry_between_legs_is_unattributable_not_launch_host():
|
|
|
332
332
|
assert q.rollable_hosts(["dellserver", "elitebook"]) == []
|
|
333
333
|
|
|
334
334
|
|
|
335
|
+
def test_a_waiting_entry_between_legs_is_not_attributed_to_its_last_known_host():
|
|
336
|
+
"""#2403, live 2026-08-18 ~23:17 UTC: elitebook was genuinely idle
|
|
337
|
+
(`active: []` on both `/status` and `/health`), and `coord drive-queue
|
|
338
|
+
list` showed `claude-coordinator#2005` in state `waiting` — deferred by
|
|
339
|
+
an unrelated per-repo concurrency cap, not running anywhere. `coord
|
|
340
|
+
release propagate` nonetheless deferred and cordoned elitebook, reading
|
|
341
|
+
the log line #2240's fix writes for a genuinely *between-legs* `running`
|
|
342
|
+
row: "attributed to its last known host".
|
|
343
|
+
|
|
344
|
+
#2240's fallback (`_last_assignment_hosts`) exists to narrow an
|
|
345
|
+
unattributable RUNNING row from fleet-wide to one host — it is not
|
|
346
|
+
licence to treat a WAITING row as though it were running just because it
|
|
347
|
+
once had an assignment. Only `state == STATE_RUNNING` may reach that
|
|
348
|
+
fallback at all; a `waiting` row — however recently it ran, however many
|
|
349
|
+
times it has been deferred — has no live assignment and no in-flight
|
|
350
|
+
process anywhere, and must roll its host normally."""
|
|
351
|
+
entry = {"repo_name": "claude-coordinator", "issue_number": 2005,
|
|
352
|
+
"state": STATE_WAITING, "deferrals": 3, "attempts": 2}
|
|
353
|
+
q = rp.assess_quiescence(
|
|
354
|
+
queue_entries=[entry],
|
|
355
|
+
# The exact shape `_last_assignment_hosts` reads: a terminal
|
|
356
|
+
# assignment naming elitebook as the entry's last worker.
|
|
357
|
+
assignments=[{"repo_name": "claude-coordinator", "issue_number": 2005,
|
|
358
|
+
"machine_name": "elitebook", "status": "COMPLETED",
|
|
359
|
+
"dispatched_at": 100.0}],
|
|
360
|
+
)
|
|
361
|
+
assert q.busy == ()
|
|
362
|
+
assert q.quiescent
|
|
363
|
+
assert q.rollable_hosts(["dellserver", "elitebook", "precision"]) == [
|
|
364
|
+
"dellserver", "elitebook", "precision",
|
|
365
|
+
]
|
|
366
|
+
|
|
367
|
+
|
|
335
368
|
def test_a_live_assignment_is_attributed_to_its_machine():
|
|
336
369
|
q = rp.assess_quiescence(
|
|
337
370
|
assignments=[{"machine_name": "dellserver", "issue_number": 42,
|
|
@@ -2626,7 +2626,19 @@ pub(crate) fn start_data_load() -> std::sync::mpsc::Receiver<BoardData> {
|
|
|
2626
2626
|
// the real local SQLite DB and overwrite pipeline_issues / data.assignments
|
|
2627
2627
|
// with whatever the developer's coord.db currently contains, making
|
|
2628
2628
|
// TuiDriver tests non-deterministic and machine-dependent.
|
|
2629
|
-
|
|
2629
|
+
//
|
|
2630
|
+
// #2284 (ms-65 §3, manifest finding 7): gated on `feature = "test-support"`
|
|
2631
|
+
// too, not just `cfg(test)` — the sealed `tests/acceptance/**` suite
|
|
2632
|
+
// (`tui/tests/acceptance.rs`, the #1042 seam) is a separate integration-test
|
|
2633
|
+
// crate, so the `coord_tui` it links against is built *without* `cfg(test)`
|
|
2634
|
+
// (only the top-level `cargo test` binary gets that cfg). Without this
|
|
2635
|
+
// widening, entering the Pipeline panel in that suite kicks
|
|
2636
|
+
// `maybe_kick_pipeline_loader` -> `refresh` -> this function, which fell
|
|
2637
|
+
// through to the real network/SQLite path and wholesale-replaced the
|
|
2638
|
+
// seeded fixture on the very next dispatched event (a RACE — whichever
|
|
2639
|
+
// finished first) — mirrors the exact same trap `resolve_board_service`
|
|
2640
|
+
// above already widened for (#1039).
|
|
2641
|
+
#[cfg(any(test, feature = "test-support"))]
|
|
2630
2642
|
{
|
|
2631
2643
|
let _ = tx.send(BoardData::default());
|
|
2632
2644
|
return rx;
|