code-coordinator 0.5.82__tar.gz → 0.5.84__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.82 → code_coordinator-0.5.84}/PKG-INFO +1 -1
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/code_coordinator.egg-info/PKG-INFO +1 -1
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/code_coordinator.egg-info/SOURCES.txt +3 -3
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/code_coordinator.egg-info/scm_version.json +2 -2
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/agent.py +142 -3
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/claim.py +14 -10
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/dispatch.py +16 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/plan_followup.py +20 -6
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/status.py +43 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/comments.py +64 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dao.py +5 -1
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/server.py +15 -0
- code_coordinator-0.5.82/coord/dashboard/webapp/dist/assets/Gallery-da3qNiIw.js → code_coordinator-0.5.84/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +1 -1
- code_coordinator-0.5.82/coord/dashboard/webapp/dist/assets/Terminal-skVFCxPU.js → code_coordinator-0.5.84/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +1 -1
- code_coordinator-0.5.82/coord/dashboard/webapp/dist/assets/index-DltfZR5f.js → code_coordinator-0.5.84/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +34 -34
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/dist/index.html +1 -1
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/dist/sw.js +1 -1
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/realtime/events.ts +14 -4
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/diagnose.py +27 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dispatch.py +24 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/drive.py +58 -1
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/drive_queue.py +47 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/drive_state.py +7 -1
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/models.py +41 -1
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/notify.py +223 -67
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/progress.py +237 -60
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/reconcile.py +53 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/smoke.py +69 -7
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/state.py +76 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent.py +86 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_dirty_worktree.py +28 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_zero_commit.py +270 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_ci_parity_2091.py +12 -2
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_claim.py +18 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_dashboard.py +51 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_diagnose.py +42 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_drive.py +58 -1
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_drive_queue.py +104 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_drive_state.py +2 -1
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_models.py +20 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_notify.py +354 -3
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_progress.py +117 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_reconcile_branch.py +163 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_reconcile_completions.py +21 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_reconcile_merges.py +42 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_retry_advisory_1606.py +22 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_smoke.py +43 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/pipeline.rs +15 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/tests.rs +25 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/.gitignore +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/CLAUDE.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/GOAL.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/LICENSE +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/MANIFEST.in +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/README.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/__init__.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/audit.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/board_service.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/brain.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/cli.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/client.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/config.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/db.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/deps.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/events.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/filelock.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/freshness.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/gates.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/goal.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/context.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/models.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/render.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/health/units.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/hooks.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/interactive.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/merge_queue.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/network.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/openapi.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/parentage.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/plans.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/release_window.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/reports.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/review.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/serve_app.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/split_work.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/test_author.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/test_report.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/usage.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/install-agent.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/pyproject.toml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/setup.cfg +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/__init__.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/conftest.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_config.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_db.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_events.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_init.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_merge_queue.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_network.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_reports.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_review.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_session.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_split.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_state.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/Cargo.lock +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/Cargo.toml +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/fixtures.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/mod.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/reports.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/types.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.82 → code_coordinator-0.5.84}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -187,10 +187,10 @@ coord/dashboard/webapp/dist/index.html
|
|
|
187
187
|
coord/dashboard/webapp/dist/manifest.webmanifest
|
|
188
188
|
coord/dashboard/webapp/dist/sw.js
|
|
189
189
|
coord/dashboard/webapp/dist/workbox-e4022e15.js
|
|
190
|
-
coord/dashboard/webapp/dist/assets/Gallery-
|
|
190
|
+
coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js
|
|
191
191
|
coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css
|
|
192
|
-
coord/dashboard/webapp/dist/assets/Terminal-
|
|
193
|
-
coord/dashboard/webapp/dist/assets/index-
|
|
192
|
+
coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js
|
|
193
|
+
coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js
|
|
194
194
|
coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css
|
|
195
195
|
coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js
|
|
196
196
|
coord/dashboard/webapp/dist/icons/icon-192.png
|
|
@@ -82,6 +82,21 @@ CANCELLED = "cancelled"
|
|
|
82
82
|
# would loop forever on "already implemented" reports); not a clean DONE
|
|
83
83
|
# either. Human should review and decide whether to re-dispatch or close.
|
|
84
84
|
ADVISORY = "advisory"
|
|
85
|
+
# #2234: a NARROWER shape of the #448 zero-commit exit — the worker's own
|
|
86
|
+
# final message shows it stopped because a STANDING repo rule (CLAUDE.md's
|
|
87
|
+
# "only the coordinator writes docs", or similar) makes the dispatched
|
|
88
|
+
# deliverable something no worker can complete, ever, on any attempt (see
|
|
89
|
+
# `_looks_like_policy_refusal`). This is deliberately a status distinct from
|
|
90
|
+
# ADVISORY, not a sub-case reported through it: every downstream consumer of
|
|
91
|
+
# ADVISORY (`coord drive`'s bounded retry, the queue's attempt budget, the
|
|
92
|
+
# terminal `blocked` bucket a human must `remove`) exists to handle "the
|
|
93
|
+
# worker got stuck or found nothing to do" — a condition retrying might fix.
|
|
94
|
+
# A policy refusal is the OPPOSITE: the worker did exactly the right thing,
|
|
95
|
+
# and retrying is guaranteed to reproduce the identical, correct refusal.
|
|
96
|
+
# Landing it in ADVISORY's bucket is what #2234 exists to stop — the #2195
|
|
97
|
+
# incident spent two drive attempts ($0.11 x 2, plus the overnight slot) and
|
|
98
|
+
# a terminal `blocked` rediscovering a rule that was never going to change.
|
|
99
|
+
REFUSED_POLICY = "refused_policy"
|
|
85
100
|
|
|
86
101
|
# #448: spec types that are expected to push commits, so a clean exit with
|
|
87
102
|
# zero commits is interesting (advisory). Review/smoke workers commit
|
|
@@ -167,6 +182,54 @@ _COMPLETED_HISTORY_CAP = 25
|
|
|
167
182
|
# within an operator's normal polling cadence.
|
|
168
183
|
_ADVISORY_TERMINAL_CHECK_COOLDOWN_S = 300.0
|
|
169
184
|
|
|
185
|
+
# #2234: markers that show up when a worker's OWN final message explains
|
|
186
|
+
# that it stopped because of a STANDING repo rule — not because it got stuck
|
|
187
|
+
# or ran out of turns. Matched only against the worker's own account (see
|
|
188
|
+
# `_looks_like_policy_refusal`), never against the briefing or issue body,
|
|
189
|
+
# which quote the same rules on every single dispatch and would false-
|
|
190
|
+
# positive on every assignment if matched directly. `claude.md` is the one
|
|
191
|
+
# filename standing worker-facing rules live in across this repo (see
|
|
192
|
+
# CLAUDE.md's own "Rules for workers" section, "Only the coordinator writes
|
|
193
|
+
# docs"); the rest are lifted verbatim from that same rule's text, which is
|
|
194
|
+
# the shape that triggered this issue (claude-coordinator#2195: an issue
|
|
195
|
+
# whose entire deliverable was a doc edit, dispatched to a worker that
|
|
196
|
+
# correctly refused and stopped). Deliberately permissive rather than
|
|
197
|
+
# requiring an exact quote — a weak/cheap model's terse refusal ("Confirmed:
|
|
198
|
+
# the rule exists verbatim at CLAUDE.md line 156...", the actual #2195
|
|
199
|
+
# transcript) may cite the rule without repeating "must not"/"forbidden"
|
|
200
|
+
# verbatim.
|
|
201
|
+
_POLICY_REFUSAL_MARKERS = (
|
|
202
|
+
"claude.md",
|
|
203
|
+
"files_forbidden",
|
|
204
|
+
"repo rule",
|
|
205
|
+
"repo's rule",
|
|
206
|
+
"coordinator work",
|
|
207
|
+
"only the coordinator",
|
|
208
|
+
"coordinator-only",
|
|
209
|
+
"should never have been dispatched",
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def _looks_like_policy_refusal(text: str | None) -> bool:
|
|
214
|
+
"""#2234: does *text* — the worker's own final message — read as a
|
|
215
|
+
refusal grounded in a STANDING repo-rule prohibition, rather than a
|
|
216
|
+
stuck/incomplete session?
|
|
217
|
+
|
|
218
|
+
Only ever consulted on the zero-commit/clean-exit shape (`_reap` calls
|
|
219
|
+
this exactly where it would otherwise set `zero_commit_reason` — see
|
|
220
|
+
below): a worker that pushed real commits never reaches this check, so a
|
|
221
|
+
successful run that happens to mention `CLAUDE.md` in passing (e.g.
|
|
222
|
+
"per CLAUDE.md I ran the build before committing") carries no risk of
|
|
223
|
+
being reclassified. Within that already-narrow shape, an ordinary
|
|
224
|
+
`STUCK:`-style report (out of turns, couldn't find the code, a flaky
|
|
225
|
+
test) mentions none of :data:`_POLICY_REFUSAL_MARKERS`, so it is left
|
|
226
|
+
exactly as ADVISORY as it always was.
|
|
227
|
+
"""
|
|
228
|
+
if not text:
|
|
229
|
+
return False
|
|
230
|
+
lowered = text.lower()
|
|
231
|
+
return any(marker in lowered for marker in _POLICY_REFUSAL_MARKERS)
|
|
232
|
+
|
|
170
233
|
|
|
171
234
|
# ── Reap tuning ───────────────────────────────────────────────────────────────
|
|
172
235
|
# claude-cli sometimes does not exit after emitting its final
|
|
@@ -2925,6 +2988,16 @@ class AgentAssignment:
|
|
|
2925
2988
|
# (a normal work assignment's deliverable is the diff itself, already
|
|
2926
2989
|
# visible on the PR — restating the transcript there would be noise).
|
|
2927
2990
|
result_text: str | None = None
|
|
2991
|
+
# #2234: the worker's own final message when `_reap` classifies a clean
|
|
2992
|
+
# (exit_code==0), 0-commit exit as a policy refusal (`status ==
|
|
2993
|
+
# REFUSED_POLICY`) rather than the #448 ADVISORY default — see
|
|
2994
|
+
# `_looks_like_policy_refusal`. `None` on every other outcome, including
|
|
2995
|
+
# an ordinary zero-commit ADVISORY (no marker matched) and the #2188
|
|
2996
|
+
# analysis-deliverable success shape (mutually exclusive with this one:
|
|
2997
|
+
# both are decided in the same `_ahead == 0` branch of `_reap`, and only
|
|
2998
|
+
# one of `analysis_deliverable`/`zero_commit_reason`/this field is ever
|
|
2999
|
+
# set for a given assignment).
|
|
3000
|
+
policy_refusal_reason: str | None = None
|
|
2928
3001
|
|
|
2929
3002
|
def to_dict(self) -> dict:
|
|
2930
3003
|
d = asdict(self)
|
|
@@ -4162,7 +4235,7 @@ class AgentServer:
|
|
|
4162
4235
|
completed = sum(
|
|
4163
4236
|
1
|
|
4164
4237
|
for a in self._assignments.values()
|
|
4165
|
-
if a.status in (DONE, FAILED, CANCELLED, ADVISORY)
|
|
4238
|
+
if a.status in (DONE, FAILED, CANCELLED, ADVISORY, REFUSED_POLICY)
|
|
4166
4239
|
)
|
|
4167
4240
|
worktree_bytes = self._cached_worktree_bytes()
|
|
4168
4241
|
artifact_bytes = self._cached_artifact_bytes()
|
|
@@ -6105,17 +6178,28 @@ class AgentServer:
|
|
|
6105
6178
|
``zero_commit_reason`` when the reap already flagged ADVISORY, since
|
|
6106
6179
|
that is the string `coord status`, the dashboard and the GitHub
|
|
6107
6180
|
advisory comment all render) is what makes the loss visible.
|
|
6181
|
+
|
|
6182
|
+
#2234 fix-1: mirrors the same rewrite for a REFUSED_POLICY reap —
|
|
6183
|
+
``policy_refusal_reason`` (not ``zero_commit_reason``) is the string
|
|
6184
|
+
the refused_policy GitHub comment and `coord status` render for that
|
|
6185
|
+
status, so a dirty worktree left behind by an otherwise-correct
|
|
6186
|
+
policy refusal needs the same visibility, on the field that surface
|
|
6187
|
+
actually reads.
|
|
6108
6188
|
"""
|
|
6109
6189
|
with self._lock:
|
|
6110
6190
|
live = self._assignments.get(assignment.id, assignment)
|
|
6111
6191
|
live.dirty_worktree_reason = reason
|
|
6112
6192
|
if live.status == ADVISORY:
|
|
6113
6193
|
live.zero_commit_reason = reason
|
|
6194
|
+
elif live.status == REFUSED_POLICY:
|
|
6195
|
+
live.policy_refusal_reason = reason
|
|
6114
6196
|
# Keep the caller's object in sync when it isn't the live one, so
|
|
6115
6197
|
# a caller holding a detached copy still sees the outcome.
|
|
6116
6198
|
assignment.dirty_worktree_reason = reason
|
|
6117
6199
|
if assignment.status == ADVISORY:
|
|
6118
6200
|
assignment.zero_commit_reason = reason
|
|
6201
|
+
elif assignment.status == REFUSED_POLICY:
|
|
6202
|
+
assignment.policy_refusal_reason = reason
|
|
6119
6203
|
self._persist()
|
|
6120
6204
|
|
|
6121
6205
|
def _rescue_uncommitted_work(
|
|
@@ -7473,6 +7557,11 @@ class AgentServer:
|
|
|
7473
7557
|
# assignment.
|
|
7474
7558
|
_analysis_deliverable = False
|
|
7475
7559
|
_zero_commit_reason: str | None = None
|
|
7560
|
+
# #2234: set alongside (never together with) `_zero_commit_reason` —
|
|
7561
|
+
# both are decided in the SAME `_ahead == 0` branch below so the two
|
|
7562
|
+
# readings of "0 commits" can never disagree about which one applies
|
|
7563
|
+
# to this assignment.
|
|
7564
|
+
_policy_refusal_reason: str | None = None
|
|
7476
7565
|
if (exit_code == 0 and assignment is not None
|
|
7477
7566
|
and assignment.worktree_path
|
|
7478
7567
|
and assignment.spec.type in _ZERO_COMMIT_TYPES):
|
|
@@ -7493,6 +7582,30 @@ class AgentServer:
|
|
|
7493
7582
|
)
|
|
7494
7583
|
except OSError:
|
|
7495
7584
|
pass
|
|
7585
|
+
elif _worker_summary is not None and _looks_like_policy_refusal(
|
|
7586
|
+
_worker_summary.result_text
|
|
7587
|
+
):
|
|
7588
|
+
# #2234: the worker's own final message cites a
|
|
7589
|
+
# standing repo-rule prohibition as the reason it
|
|
7590
|
+
# stopped — the #2195 shape. Distinct from the
|
|
7591
|
+
# ADVISORY fallback below: retrying this assignment
|
|
7592
|
+
# cannot change a rule that isn't going anywhere, so
|
|
7593
|
+
# it must not consume the queue's attempt budget or
|
|
7594
|
+
# land in the same bucket as a genuinely stuck
|
|
7595
|
+
# worker.
|
|
7596
|
+
_policy_refusal_reason = _worker_summary.result_text or (
|
|
7597
|
+
"worker cited a standing repo-rule prohibition"
|
|
7598
|
+
)
|
|
7599
|
+
try:
|
|
7600
|
+
with open(assignment.log_path, "a") as reopen:
|
|
7601
|
+
reopen.write(
|
|
7602
|
+
"# reap: refused_policy — 0 commits ahead "
|
|
7603
|
+
f"of {_base}; worker's final message cites "
|
|
7604
|
+
"a standing repo-rule prohibition, status "
|
|
7605
|
+
"set to refused_policy (#2234)\n"
|
|
7606
|
+
)
|
|
7607
|
+
except OSError:
|
|
7608
|
+
pass
|
|
7496
7609
|
else:
|
|
7497
7610
|
_zero_commit_reason = (
|
|
7498
7611
|
"worker exited cleanly but pushed 0 commits"
|
|
@@ -7566,6 +7679,17 @@ class AgentServer:
|
|
|
7566
7679
|
# shrug.
|
|
7567
7680
|
assignment.status = FAILED
|
|
7568
7681
|
assignment.push_failure_reason = _push_failure_reason
|
|
7682
|
+
elif _policy_refusal_reason is not None:
|
|
7683
|
+
# #2234: clean exit, no commits, and the worker's own
|
|
7684
|
+
# final message cites a standing repo-rule
|
|
7685
|
+
# prohibition — a distinct, permanent shape of "0
|
|
7686
|
+
# commits", not the generic #448 ADVISORY. Checked
|
|
7687
|
+
# BEFORE `_zero_commit_reason` (the two are mutually
|
|
7688
|
+
# exclusive by construction — see the `_reap`
|
|
7689
|
+
# computation above — so the order is never actually
|
|
7690
|
+
# load-bearing, kept parallel to it for readability).
|
|
7691
|
+
assignment.status = REFUSED_POLICY
|
|
7692
|
+
assignment.policy_refusal_reason = _policy_refusal_reason
|
|
7569
7693
|
elif _zero_commit_reason is not None:
|
|
7570
7694
|
# #448: clean exit but no commits → advisory, not done.
|
|
7571
7695
|
assignment.status = ADVISORY
|
|
@@ -7826,8 +7950,16 @@ class AgentServer:
|
|
|
7826
7950
|
):
|
|
7827
7951
|
return
|
|
7828
7952
|
self._last_advisory_terminal_check = now
|
|
7953
|
+
# #2234: REFUSED_POLICY joins ADVISORY here for the same reason
|
|
7954
|
+
# — both are terminal, zero-commit statuses the agent would
|
|
7955
|
+
# otherwise keep serving indefinitely from its own `/status`
|
|
7956
|
+
# feed once GitHub confirms the work is done, forcing every
|
|
7957
|
+
# downstream consumer (dashboard, TUI, any future client) to
|
|
7958
|
+
# reimplement the same GitHub-terminality filter this method
|
|
7959
|
+
# exists to spare them.
|
|
7829
7960
|
candidates = [
|
|
7830
|
-
a for a in self._assignments.values()
|
|
7961
|
+
a for a in self._assignments.values()
|
|
7962
|
+
if a.status in (ADVISORY, REFUSED_POLICY)
|
|
7831
7963
|
]
|
|
7832
7964
|
if not candidates:
|
|
7833
7965
|
return
|
|
@@ -7899,7 +8031,14 @@ class AgentServer:
|
|
|
7899
8031
|
ordered = list(self._assignments.values())
|
|
7900
8032
|
superseded_ids: list[str] = []
|
|
7901
8033
|
for i, a in enumerate(ordered):
|
|
7902
|
-
|
|
8034
|
+
# #2234: REFUSED_POLICY joins ADVISORY here too — a refusal
|
|
8035
|
+
# for issue X can be superseded the same way an advisory can
|
|
8036
|
+
# (e.g. the coordinator re-scopes the issue so a later
|
|
8037
|
+
# dispatch's deliverable is no longer coordinator-only, and
|
|
8038
|
+
# that later attempt reaches DONE). Same in-memory
|
|
8039
|
+
# comparison, same root cause as `_prune_terminal_advisory`
|
|
8040
|
+
# above.
|
|
8041
|
+
if a.status not in (ADVISORY, REFUSED_POLICY):
|
|
7903
8042
|
continue
|
|
7904
8043
|
key = (a.spec.repo_name, a.spec.issue_number)
|
|
7905
8044
|
for later in ordered[i + 1 :]:
|
|
@@ -184,15 +184,19 @@ def superseding_work_row(board: Board, assignment) -> "Assignment | None":
|
|
|
184
184
|
|
|
185
185
|
Ordering is by ``dispatched_at``, with the assignment id as a deterministic
|
|
186
186
|
tie-break so two rows stamped in the same second still order stably. A
|
|
187
|
-
``failed`` or ``
|
|
188
|
-
terminal no-op outcomes (``_ZERO_COMMIT_TYPES``
|
|
189
|
-
zero commits pushed, e.g. "already fixed"
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
187
|
+
``failed``, ``advisory``, or ``refused_policy`` later row does not
|
|
188
|
+
supersede — all three are terminal no-op outcomes (``_ZERO_COMMIT_TYPES``
|
|
189
|
+
in ``coord/agent.py``: zero commits pushed, e.g. "already fixed", a
|
|
190
|
+
graceful usage-limit exit, or a #2234 policy refusal) that leave the
|
|
191
|
+
branch exactly as the earlier row left it, so the earlier row is still
|
|
192
|
+
the branch's author. Without excluding these here, a `--fix-of` round
|
|
193
|
+
that lands zero commits would falsely mark the row it was fixing as
|
|
194
|
+
superseded — and since none of ``advisory``/``refused_policy`` is itself
|
|
195
|
+
a valid dispatch target (``dispatch_smoke`` requires ``status ==
|
|
196
|
+
"done"``), the branch would then never get *any* Test dispatch. (#2234
|
|
197
|
+
added ``refused_policy`` to this exclusion — it's drawn from the same
|
|
198
|
+
``_ZERO_COMMIT_TYPES`` gate as ``advisory`` in ``coord/agent.py``'s
|
|
199
|
+
``_reap`` and reproduces the identical failure mode if left out.)
|
|
196
200
|
|
|
197
201
|
Returns the (newest) superseding row so callers can name it in a log line,
|
|
198
202
|
or ``None`` when *assignment* is the branch's current work row. Related but
|
|
@@ -213,7 +217,7 @@ def superseding_work_row(board: Board, assignment) -> "Assignment | None":
|
|
|
213
217
|
continue
|
|
214
218
|
if a.type not in WORK_LIKE_TYPES:
|
|
215
219
|
continue
|
|
216
|
-
if a.status in ("failed", "advisory"):
|
|
220
|
+
if a.status in ("failed", "advisory", "refused_policy"):
|
|
217
221
|
continue
|
|
218
222
|
if a.repo_name != assignment.repo_name or a.branch != branch:
|
|
219
223
|
continue
|
|
@@ -1800,6 +1800,22 @@ def retry(assignment_id: str, config_path: Path, acknowledge_cost: bool = False)
|
|
|
1800
1800
|
if assignment is None:
|
|
1801
1801
|
click.echo(f"error: assignment {assignment_id!r} not found in board", err=True)
|
|
1802
1802
|
sys.exit(1)
|
|
1803
|
+
if assignment.status == "refused_policy":
|
|
1804
|
+
# #2234: name the reason instead of falling into the generic
|
|
1805
|
+
# "not 'failed' or 'advisory'" message below — a policy refusal is
|
|
1806
|
+
# correct behavior (the worker did the right thing refusing a
|
|
1807
|
+
# CLAUDE.md-prohibited task), and retrying would just reproduce the
|
|
1808
|
+
# identical refusal since the rule it cited isn't going anywhere.
|
|
1809
|
+
click.echo(
|
|
1810
|
+
f"error: assignment {assignment_id} is 'refused_policy' — the "
|
|
1811
|
+
"worker correctly refused this work on a standing repo-rule "
|
|
1812
|
+
"prohibition. Retrying cannot change that verdict. Needs the "
|
|
1813
|
+
"coordinator: do the work directly, or re-scope the issue so "
|
|
1814
|
+
"its deliverable isn't coordinator-only, then `coord "
|
|
1815
|
+
"drive-queue remove` once handled (#2234).",
|
|
1816
|
+
err=True,
|
|
1817
|
+
)
|
|
1818
|
+
sys.exit(1)
|
|
1803
1819
|
if assignment.status not in ("failed", "advisory"):
|
|
1804
1820
|
click.echo(
|
|
1805
1821
|
f"error: assignment {assignment_id} is {assignment.status!r}, not "
|
|
@@ -832,9 +832,19 @@ def fix(assignment_id: str, config_path: Path, guidance: str, force: bool) -> No
|
|
|
832
832
|
|
|
833
833
|
# #2091: the stored Test verdict says PASSED while the branch's live CI
|
|
834
834
|
# says RED — the coord-portal #14 shape. Both are "the tests", and they
|
|
835
|
-
# disagree; that is a fact about the Test gate
|
|
836
|
-
#
|
|
837
|
-
#
|
|
835
|
+
# disagree; that is a fact about the Test gate, not a detail of this
|
|
836
|
+
# dispatch, so name it rather than quietly preferring one.
|
|
837
|
+
#
|
|
838
|
+
# #2244: this used to ASSERT the cause ("the Test stage ran a narrower
|
|
839
|
+
# suite than CI — set ci_command") without ever having measured it. On
|
|
840
|
+
# #2230 that diagnosis was simply wrong: the Test stage ran the FULL
|
|
841
|
+
# suite, CI ran the same tests, the same five failed in both — and the
|
|
842
|
+
# green verdict came from the headless smoke's unwired verdict channel
|
|
843
|
+
# (a `claude -p` session exits 0 whatever the suite did, so `SMOKE: fail`
|
|
844
|
+
# was recorded as `passed`). Acting on the old message would have changed
|
|
845
|
+
# nothing and buried the real defect under config. So: state the conflict,
|
|
846
|
+
# list the candidate causes, and point at the evidence that distinguishes
|
|
847
|
+
# them, rather than naming one.
|
|
838
848
|
if ci_read.is_red and (
|
|
839
849
|
assignment.test_state == "passed" or assignment.smoke_test == "pass"
|
|
840
850
|
):
|
|
@@ -843,9 +853,13 @@ def fix(assignment_id: str, config_path: Path, guidance: str, force: bool) -> No
|
|
|
843
853
|
f"conflict (#2091): assignment {assignment_id} has a stored Test "
|
|
844
854
|
f"verdict of {stored_verdict!r} "
|
|
845
855
|
f"but CI on PR #{ci_read.pr_number} is RED on the same branch. "
|
|
846
|
-
"
|
|
847
|
-
|
|
848
|
-
"
|
|
856
|
+
"Trusting CI. Which of the two is wrong is not determined here — "
|
|
857
|
+
"check, in this order: (1) what the Test stage actually ran and "
|
|
858
|
+
f"reported (`coord log {assignment_id}` → its `SMOKE:` verdict "
|
|
859
|
+
"line and suite summary); (2) whether that suite is narrower than "
|
|
860
|
+
f"CI's (if so, set repos[{assignment.repo_name}].ci_command to "
|
|
861
|
+
"what CI runs); (3) whether the failures are environmental on the "
|
|
862
|
+
"Test machine but not in CI.",
|
|
849
863
|
err=True,
|
|
850
864
|
)
|
|
851
865
|
|
|
@@ -349,6 +349,23 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
|
|
|
349
349
|
done.status = "advisory"
|
|
350
350
|
if done.type == "work":
|
|
351
351
|
done.review_state = "advisory"
|
|
352
|
+
elif agent_status == "refused_policy":
|
|
353
|
+
# #2234: worker exited cleanly, pushed 0 commits, and its own
|
|
354
|
+
# final message cited a standing repo-rule prohibition (the
|
|
355
|
+
# #2195 shape). Mirror reconcile.py's `reconcile()`: preserve
|
|
356
|
+
# the distinct status rather than folding it into "advisory"
|
|
357
|
+
# — without this branch it falls to the `else` below and gets
|
|
358
|
+
# recorded FAILED, feeding `auto_reassign` on a condition
|
|
359
|
+
# retrying can never fix.
|
|
360
|
+
done = board.mark_done_by_id(
|
|
361
|
+
a.assignment_id,
|
|
362
|
+
finished_at=entry.get("finished_at"),
|
|
363
|
+
branch=branch,
|
|
364
|
+
)
|
|
365
|
+
if done is not None:
|
|
366
|
+
done.status = "refused_policy"
|
|
367
|
+
if done.type == "work":
|
|
368
|
+
done.review_state = "advisory"
|
|
352
369
|
else:
|
|
353
370
|
board.mark_failed_by_id(
|
|
354
371
|
a.assignment_id,
|
|
@@ -435,6 +452,32 @@ def status(config_path: Path, machine_filter: str | None, no_reconcile: bool, ti
|
|
|
435
452
|
f"[{spec.get('repo_name', '?')}] — {reason}"
|
|
436
453
|
)
|
|
437
454
|
|
|
455
|
+
# #2234: surface a policy refusal in its OWN section rather than folding
|
|
456
|
+
# it into Advisory above — same #1472 "still live on GitHub" filter, but
|
|
457
|
+
# distinct wording: this is a routing decision for the coordinator, not
|
|
458
|
+
# a "did the worker get stuck" question.
|
|
459
|
+
policy_refusal_entries = _live_advisory_entries(
|
|
460
|
+
[
|
|
461
|
+
e for e in agent_completed.values()
|
|
462
|
+
if e.get("status") == "refused_policy" and not e.get("usage_limit_reason")
|
|
463
|
+
],
|
|
464
|
+
cfg,
|
|
465
|
+
)
|
|
466
|
+
if policy_refusal_entries:
|
|
467
|
+
click.echo("")
|
|
468
|
+
click.echo(
|
|
469
|
+
"🚫 Needs the coordinator (worker refused on a standing repo-rule "
|
|
470
|
+
"prohibition):"
|
|
471
|
+
)
|
|
472
|
+
for e in policy_refusal_entries:
|
|
473
|
+
spec = e.get("spec", {})
|
|
474
|
+
reason = e.get("policy_refusal_reason") or "cited a repo-rule prohibition"
|
|
475
|
+
click.echo(
|
|
476
|
+
f" #{spec.get('issue_number', '?')}: "
|
|
477
|
+
f"{spec.get('issue_title', '?')} "
|
|
478
|
+
f"[{spec.get('repo_name', '?')}] — {reason}"
|
|
479
|
+
)
|
|
480
|
+
|
|
438
481
|
blocked = compute_blocked(cfg.repos, board.active)
|
|
439
482
|
if blocked:
|
|
440
483
|
click.echo("")
|
|
@@ -20,6 +20,16 @@ EVENT_FAILURE = "failure"
|
|
|
20
20
|
EVENT_STUCK = "stuck"
|
|
21
21
|
EVENT_PLAN = "plan"
|
|
22
22
|
EVENT_ADVISORY = "advisory"
|
|
23
|
+
# #2234: a worker exited cleanly (exit_code 0), pushed 0 commits, AND its
|
|
24
|
+
# own final message cited a standing repo-rule prohibition (the #2195
|
|
25
|
+
# shape — a doc-only deliverable CLAUDE.md tells every worker to refuse).
|
|
26
|
+
# Modeled directly on EVENT_ADVISORY (same "0-commit clean exit" trigger)
|
|
27
|
+
# but deliberately distinct: an advisory needs a human to look and decide;
|
|
28
|
+
# a policy refusal already has its answer — retrying cannot change a rule
|
|
29
|
+
# that isn't going anywhere. Posting a separate event (rather than folding
|
|
30
|
+
# this into EVENT_ADVISORY) keeps the two legible on GitHub the same way
|
|
31
|
+
# `coord.agent.REFUSED_POLICY` keeps them distinct on the board.
|
|
32
|
+
EVENT_REFUSED_POLICY = "refused_policy"
|
|
23
33
|
# #846: an assignment running past its wall-clock threshold, or thrashing
|
|
24
34
|
# through fix/review rounds without converging. Distinct from EVENT_STUCK
|
|
25
35
|
# (a worker self-reported STATUS/STUCK line) — this fires from time/round
|
|
@@ -649,6 +659,60 @@ def format_advisory(
|
|
|
649
659
|
return "\n".join(lines)
|
|
650
660
|
|
|
651
661
|
|
|
662
|
+
def format_refused_policy(
|
|
663
|
+
*,
|
|
664
|
+
assignment_id: str,
|
|
665
|
+
machine_name: str,
|
|
666
|
+
repo_name: str,
|
|
667
|
+
issue_number: int,
|
|
668
|
+
duration_seconds: float | None = None,
|
|
669
|
+
log_path: str | None = None,
|
|
670
|
+
reason: str = "",
|
|
671
|
+
) -> str:
|
|
672
|
+
"""Format a comment for a #2234 policy refusal — a 0-commit clean exit
|
|
673
|
+
whose worker cited a standing repo-rule prohibition (e.g. "only the
|
|
674
|
+
coordinator writes docs").
|
|
675
|
+
|
|
676
|
+
Distinct from `format_advisory`: an advisory means "a human needs to
|
|
677
|
+
look and decide"; this means "the worker already found the answer —
|
|
678
|
+
retrying will reproduce the identical refusal, because the rule isn't
|
|
679
|
+
going anywhere." No re-dispatch suggestion, and no ADVISORY framing —
|
|
680
|
+
this names the routing decision (needs the coordinator) rather than
|
|
681
|
+
presenting as an unresolved outcome.
|
|
682
|
+
"""
|
|
683
|
+
marker = _marker(
|
|
684
|
+
EVENT_REFUSED_POLICY,
|
|
685
|
+
assignment=assignment_id,
|
|
686
|
+
machine=machine_name,
|
|
687
|
+
repo=repo_name,
|
|
688
|
+
issue=issue_number,
|
|
689
|
+
)
|
|
690
|
+
lines = [
|
|
691
|
+
"## Coordinator: Refused — Standing Repo-Rule Prohibition",
|
|
692
|
+
marker,
|
|
693
|
+
f"**Machine:** {machine_name}",
|
|
694
|
+
"**Status:** refused_policy",
|
|
695
|
+
f"**Duration:** {_fmt_duration(duration_seconds)}",
|
|
696
|
+
]
|
|
697
|
+
if log_path:
|
|
698
|
+
lines.append(f"**Log:** `{log_path}`")
|
|
699
|
+
lines.append("")
|
|
700
|
+
lines.append(
|
|
701
|
+
"The worker exited cleanly (exit code 0) and pushed **no commits** "
|
|
702
|
+
"because it correctly refused work that a standing repo rule (e.g. "
|
|
703
|
+
"CLAUDE.md's \"only the coordinator writes docs\") prohibits it from "
|
|
704
|
+
"doing. This is not a failure — retrying will reproduce the same "
|
|
705
|
+
"refusal, since the rule it cited isn't going anywhere. Needs the "
|
|
706
|
+
"coordinator: do the work directly, or re-scope the issue so its "
|
|
707
|
+
"deliverable isn't coordinator-only."
|
|
708
|
+
)
|
|
709
|
+
if reason.strip():
|
|
710
|
+
lines.append("")
|
|
711
|
+
lines.append("### Worker note")
|
|
712
|
+
lines.append(reason.strip())
|
|
713
|
+
return "\n".join(lines)
|
|
714
|
+
|
|
715
|
+
|
|
652
716
|
def format_plan(
|
|
653
717
|
*,
|
|
654
718
|
assignment_id: str,
|
|
@@ -36,7 +36,11 @@ SCHEMA_VERSION = 1
|
|
|
36
36
|
|
|
37
37
|
# #762: terminal assignment statuses. Anything NOT in this set (running /
|
|
38
38
|
# pending) is "in-flight" and always kept on the board projection.
|
|
39
|
-
|
|
39
|
+
# #2234: "refused_policy" is terminal exactly like "advisory" — see
|
|
40
|
+
# coord.agent.REFUSED_POLICY.
|
|
41
|
+
TERMINAL_STATUSES = frozenset(
|
|
42
|
+
{"done", "merged", "failed", "cancelled", "advisory", "refused_policy"}
|
|
43
|
+
)
|
|
40
44
|
|
|
41
45
|
# #762: how many days of *terminal* assignment history the /board projection
|
|
42
46
|
# carries. The board grew unbounded (1209 assignments / 4.37 MB) and overran
|
|
@@ -80,6 +80,15 @@ ASSIGNMENT_CANCELLED = "assignment_cancelled"
|
|
|
80
80
|
# red failure — it's a "needs attention" state. Route it to a distinct
|
|
81
81
|
# event so the dashboard can style it appropriately (warning, not failure).
|
|
82
82
|
ASSIGNMENT_ADVISORY = "assignment_advisory"
|
|
83
|
+
# #2234: refused_policy (0-commit clean exit whose worker cited a standing
|
|
84
|
+
# repo-rule prohibition — `coord.agent.REFUSED_POLICY`) is the same shape as
|
|
85
|
+
# ASSIGNMENT_ADVISORY above but a distinct verdict: the worker did the
|
|
86
|
+
# CORRECT thing, not an undecided one. Without a distinct event it fell
|
|
87
|
+
# into the `else` branch below (commented "'failed' and any other
|
|
88
|
+
# unexpected terminal status") and was published to the phone dashboard as
|
|
89
|
+
# ASSIGNMENT_FAILED — reproducing, on this surface, the exact "worker that
|
|
90
|
+
# refused reads as a worker that failed" defect #2234 exists to fix.
|
|
91
|
+
ASSIGNMENT_REFUSED_POLICY = "assignment_refused_policy"
|
|
83
92
|
# #846: an assignment running past its wall-clock threshold, or thrashing
|
|
84
93
|
# through fix/review rounds without converging (coord.notify.attention_signal
|
|
85
94
|
# — same detection core as the coordinator's GitHub-comment backstop).
|
|
@@ -226,6 +235,9 @@ async def _poll_once(
|
|
|
226
235
|
# Bug 1 fix: three-way branch — cancelled must not fire FAILED.
|
|
227
236
|
# #448: advisory routes to a distinct event so the dashboard does
|
|
228
237
|
# not paint a 0-commit clean exit as a failure.
|
|
238
|
+
# #2234: refused_policy gets the same treatment as advisory —
|
|
239
|
+
# checked BEFORE the `else` catch-all, or it falls into
|
|
240
|
+
# ASSIGNMENT_FAILED like any other unrecognised terminal status.
|
|
229
241
|
if status == "done":
|
|
230
242
|
event_source.publish(ASSIGNMENT_COMPLETED, payload)
|
|
231
243
|
elif status == "cancelled":
|
|
@@ -233,6 +245,9 @@ async def _poll_once(
|
|
|
233
245
|
elif status == "advisory":
|
|
234
246
|
payload["zero_commit_reason"] = entry.get("zero_commit_reason")
|
|
235
247
|
event_source.publish(ASSIGNMENT_ADVISORY, payload)
|
|
248
|
+
elif status == "refused_policy":
|
|
249
|
+
payload["policy_refusal_reason"] = entry.get("policy_refusal_reason")
|
|
250
|
+
event_source.publish(ASSIGNMENT_REFUSED_POLICY, payload)
|
|
236
251
|
else: # "failed" and any other unexpected terminal status
|
|
237
252
|
payload["exit_code"] = entry.get("exit_code")
|
|
238
253
|
event_source.publish(ASSIGNMENT_FAILED, payload)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as Fe,j as s,a as I,d as ho,r as l,e as de,R as go,f as Pe,g as z,h as Je,i as Ke,P as G,k as P,l as vo,m as ge,n as xo,o as Ea,D as gn,p as bo,X as wo,q as Pa,s as Ma,C as Da,v as ja,w as _a,T as Ia,x as Aa,y as Oa,B as H,z as Na,A as Bt,E as ka}from"./index-
|
|
1
|
+
import{c as Fe,j as s,a as I,d as ho,r as l,e as de,R as go,f as Pe,g as z,h as Je,i as Ke,P as G,k as P,l as vo,m as ge,n as xo,o as Ea,D as gn,p as bo,X as wo,q as Pa,s as Ma,C as Da,v as ja,w as _a,T as Ia,x as Aa,y as Oa,B as H,z as Na,A as Bt,E as ka}from"./index-DHn-RIJ8.js";/**
|
|
2
2
|
* @license lucide-react v0.462.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{c as Bt,r as Ne,j as R,a as Vt,u as Zr,b as Qr,t as en}from"./index-
|
|
1
|
+
import{c as Bt,r as Ne,j as R,a as Vt,u as Zr,b as Qr,t as en}from"./index-DHn-RIJ8.js";/**
|
|
2
2
|
* @license lucide-react v0.462.0 - ISC
|
|
3
3
|
*
|
|
4
4
|
* This source code is licensed under the ISC license.
|