code-coordinator 0.5.102__tar.gz → 0.5.105__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.102 → code_coordinator-0.5.105}/PKG-INFO +1 -1
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/code_coordinator.egg-info/PKG-INFO +1 -1
- code_coordinator-0.5.105/code_coordinator.egg-info/scm_version.json +8 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/merge_queue.py +121 -10
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/reports.py +140 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/serve_app.py +4 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_merge_queue.py +109 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_reports.py +187 -3
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/Cargo.lock +1 -1
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/Cargo.toml +1 -1
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/fixtures.rs +382 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/mod.rs +24 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/reports.rs +398 -3
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/tests.rs +344 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/types.rs +55 -0
- code_coordinator-0.5.102/code_coordinator.egg-info/scm_version.json +0 -8
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.claude/commands/board.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.claude/commands/complete-session.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.claude/commands/coordinator.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.githooks/_lib.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.githooks/post-checkout +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.githooks/post-commit +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.githooks/post-merge +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.github/coord-ci-acceptance.yml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.github/workflows/auto-release.yml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.github/workflows/cargo-test.yml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.github/workflows/publish.yml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.github/workflows/release-tui.yml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.github/workflows/test.yml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/.gitignore +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/CLAUDE.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/GOAL.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/LICENSE +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/MANIFEST.in +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/README.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/code_coordinator.egg-info/SOURCES.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/code_coordinator.egg-info/dependency_links.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/code_coordinator.egg-info/entry_points.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/code_coordinator.egg-info/requires.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/code_coordinator.egg-info/scm_file_list.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/code_coordinator.egg-info/top_level.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/__init__.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/_board_mapping.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/acceptance.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/acceptance_drivers.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/agent.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/agent_app.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/agent_update.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/agents/opencode/.gitignore +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/agents/opencode/agents/work.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/agents/opencode/routing.jsonc +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/audit.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/auto_loop.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/block_log.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/board_bool_guard.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/board_service.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/board_wire.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/brain.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/branch_model.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/bug_intake.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/cargo_cache.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/ci_github.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/ci_store.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/claim.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/cli.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/client.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/__init__.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/_common.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/acceptance.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/agent_ops.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/audit.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/chat.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/dispatch.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/dispatch_workers.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/drive.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/drive_queue.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/gate_a.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/gates.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/issues.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/lifecycle.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/merge.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/milestone.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/plan_followup.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/plans.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/portal.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/release.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/repo.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/report.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/review.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/scorecard.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/sessions.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/setup.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/status.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/terminal.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/test_gate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/commands/tui.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/comments.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/config.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/conflict_fix.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dao.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/__init__.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/fixture.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/index.html +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/server.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/terminal.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/.gitignore +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/components.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/assets/Gallery-Cq84itDE.js +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/assets/Terminal-9CEnUXvW.css +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/assets/Terminal-DOXLcMue.js +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/assets/index-DHn-RIJ8.js +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/assets/index-Dq4kwTdw.css +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/assets/workbox-window.prod.es5-BqEJf4Xk.js +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/icons/icon-192.png +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/icons/icon-512.png +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/icons/icon.svg +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/index.html +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/manifest.webmanifest +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/sw.js +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/dist/workbox-e4022e15.js +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/e2e/available-gates-terminal.spec.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/e2e/deep-link.spec.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/e2e/fixtureServer.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/e2e/live-update-fixture.spec.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/e2e/realtime.spec.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/e2e/shell.spec.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/e2e/smoke.spec.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/e2e/terminal.spec.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/e2e/theme.spec.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/eslint.config.js +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/index.html +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/node_modules/flatted/python/flatted.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/package-lock.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/package.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/playwright.acceptance.config.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/playwright.config.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/postcss.config.js +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/public/icons/icon-192.png +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/public/icons/icon-512.png +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/public/icons/icon.svg +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/App.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/api/client.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/api/generated.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ConnectionBadge.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/Detail.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/Gallery.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/Home.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/MobileKeyBar.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/PanelHeader.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/PipelineCard.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/SessionCard.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/SessionDetail.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/SessionsList.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/Terminal.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/__tests__/ConnectionBadge.test.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/__tests__/Detail.test.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/__tests__/Gallery.test.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/__tests__/Home.test.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/__tests__/MobileKeyBar.test.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/__tests__/PipelineCard.test.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/__tests__/SessionCard.test.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/__tests__/Terminal.test.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/badge.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/button.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/card.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/dialog.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/dropdown-menu.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/empty-state.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/sheet.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/skeleton.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/tabs.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/theme-provider.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/theme-toggle.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/toast.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/toaster.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/tooltip.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/components/ui/use-toast.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/index.css +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/lib/pipeline.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/lib/utils.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/main.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/realtime/RealtimeProvider.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/realtime/__tests__/RealtimeProvider.test.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/realtime/__tests__/connection.test.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/realtime/connection.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/realtime/events.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/routes/__tests__/paths.test.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/routes/paths.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/ActivityRail.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/AppShell.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/ComingSoon.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/EmptyDetail.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/RouteNotFound.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/ShellLayout.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/StatusBar.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/__tests__/ShellLayout.test.tsx +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/__tests__/shellState.test.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/__tests__/stubViewport.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/breakpoints.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/railItems.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/shellState.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/shell/useRegionFocus.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/test-setup.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/src/vite-env.d.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/tailwind.config.js +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/tsconfig.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/tsconfig.node.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dashboard/webapp/vite.config.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/db.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dead_end.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/README.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy_manifest.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deploy_units.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/deps.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/diagnose.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dispatch.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/dist_name.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/drive.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/drive_queue.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/drive_state.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/events.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/failure_class.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/filelock.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/fleet_config_health.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/freshness.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/gate_a.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/gate_b.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/gate_snapshot.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/gates.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/github_ops.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/goal.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/graph_health.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/__init__.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/aggregate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/__init__.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/agent_install.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/cargo_targets.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/claude_binary.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/disk.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/fleet_board.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/fleet_deploy_lanes.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/fleet_phantom.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/fleet_unit_drift.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/graph.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/graphify_cli.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/index_lock.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/plan_usage.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/repo_state.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/spawned_coord.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/timer_active.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/toolchain.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/unit_drift.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/unit_enablement.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/checks/worktrees.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/cli.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/context.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/fleet_snapshot.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/models.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/pypi.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/registry.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/render.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/health/units.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/hooks.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/housekeeping.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/interactive.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/issue_store.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/liveness_auditor.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/machine_pause.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/milestone_chat.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/milestone_dispatch.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/milestone_gate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/milestone_order.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/mock_author.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/models.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/network.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/new_issue_chat.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/notifier/__init__.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/notifier/baseline.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/notifier/cli.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/notifier/collect.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/notifier/digest.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/notifier/models.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/notifier/predicate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/notifier/service.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/notifier/store.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/notifier/transport.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/notify.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/openapi.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/overlap_fence.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/overlap_predict.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/parentage.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/parentage_github.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/pipeline.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/plan_parser.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/plans.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/platform_paths.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/portal_bridge.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/portal_store.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/portal_sync.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/pr_body_lint.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/prereqs.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/progress.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/providers/__init__.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/providers/base.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/providers/claude.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/providers/claude_pty.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/providers/opencode.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/queue_diagnose.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/reconcile.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/refine_chat.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/release_cordon.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/release_propagate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/release_verify.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/release_window.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/repo_edit.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/repo_onboard.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/revalidate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/review.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/scorecard.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/skills/update-issue/SKILL.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/smoke.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/spend_ceiling.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/split_work.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/stage_projection.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/state.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/test_author.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/test_chat.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/test_orchestrator.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/test_report.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/tui_release.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/usage.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/usage_limits.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/usage_rollup.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coord/worker_events.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/coordinator.example.yml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-agent.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-db-backup.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-db-backup.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-db-backup.timer +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-drive-queue.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-drive-queue.timer +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-notify.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-notify.timer +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-release-propagate.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-release-propagate.timer +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-release-window.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-release-window.timer +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-serve.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-web-dist-build.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-web-dist-build.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-web-dist-build.timer +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-web-rollback.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/coord-web.service +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/deploy/node-shim.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/AGENT_OPERATIONS.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/ARCHITECTURE.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/ARCH_SECURITY_GATES.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/COCKPIT.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/COST_DISCIPLINE.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/CROSS_PLATFORM.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/CUSTOMER_PORTAL.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/DRIVE_QUEUE.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/EPHEMERAL_WORKERS.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/FORGE_MIGRATION.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/GRAPHIFY_SETUP.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/ISSUE_GUIDANCE.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/MAC_MINI.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/MERGE_AUTO_DRAIN_TRUST_BAR.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/NOTIFIER.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/OPENCODE_VERIFICATION.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/OPERATING_GOTCHAS.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/ORACLE_LOOP.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/PHONE_WEBAPP.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/PIPELINE_V2.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/PLATFORM_EVOLUTION.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/SECOND_BACKEND.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/STORE_SERVICE.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/TEST_FIRST_BUG_LANE.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/WEB_CONTROL_CENTER.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/mocks/web/README.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/mocks/web/_tokens.css +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/mocks/web/issue-detail.html +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/mocks/web/pipeline-narrow.html +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/docs/mocks/web/pipeline-wide.html +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/graphify-out/.gitignore +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/install-agent.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/pyproject.toml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/audit_review_verdict_overrides.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/azure-workers/bootstrap-shared.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/azure-workers/build-worker-image.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/azure-workers/coordinator-machine.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/azure-workers/epic-down.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/azure-workers/epic-up.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/azure-workers/preflight.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/azure-workers/provision-worker.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/azure-workers/scrub-and-generalize.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/azure-workers/tailnet-acl.hujson +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/azure-workers/verify-github-token.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/codegen.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/coord-test-runner.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/drive-batch.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/gen_board_fixture.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/next_release_tag.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/run_tests_in_populated_home.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/run_tests_without_gh.sh +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/smoke_437_interactive.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/verify_878_review_capture.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/verify_release_published.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/scripts/verify_release_wheel.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/setup.cfg +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/SMOKE_SET.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/__init__.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-33/audit_1039.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-33/contract.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-33/manifest.yml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-33/mocks/audit-panel-detail.screen +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-33/mocks/audit-panel-empty.screen +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-33/mocks/audit-panel-filters.screen +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-33/mocks/audit-panel-populated.screen +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-37/conftest.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-37/contract.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-37/manifest.yml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-37/test_usage_cli_1115.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-37/test_usage_core_1118.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-38/contract.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-38/manifest.yml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-38/mocks/plans-base.screen +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-38/mocks/plans-detail-pane.screen +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-38/mocks/plans-help-overlay.screen +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-38/mocks/plans-palette.screen +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-38/mocks/plans-rightclick-epic.screen +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-38/mocks/plans-rightclick-header.screen +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-38/mocks/plans-rightclick-stub.screen +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-38/plans_detail_1122.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-38/plans_help_1124.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-38/plans_rightclick_1123.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-51/contract.md +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-51/home-active-extended.spec.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-51/home-active.spec.ts +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-51/manifest.yml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-51/mocks/home-active.html +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-51/tsconfig.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/acceptance/ms-example/mocks/home-active.html +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/conftest.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/board-pipeline-basic.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/board-pipeline-terminal-gates.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/opencode_run_failure_sample.jsonl +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/opencode_run_sample.jsonl +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/playwright/all_pass.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/playwright/global_setup_crash.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/playwright/mixed_fail.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/playwright/retry_then_pass.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/playwright/retry_then_pass.junit.xml +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/playwright/skip.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/playwright/truncated.json +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/test_report/cargo_compile_error.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/test_report/cargo_multi_target_failures.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/test_report/cargo_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/test_report/pytest_collection_error.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/test_report/pytest_error_string_in_body.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/test_report/pytest_internal_error.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/test_report/pytest_mixed_failures.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/fixtures/test_report/pytest_no_parseable_failures.txt +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_acceptance.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_acceptance_drivers.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_api_error.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_app.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_branch_base.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_branch_capture.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_config_free_1712.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_deploy_units_endpoint.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_dirty_worktree.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_graph_self_heal.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_health_h3.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_idle_restart.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_push_failure.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_reap.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_repos_and_pull.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_restart_services_endpoint.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_startup_diagnostics.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_update.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_update_bluegreen.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_usage_limit.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_agent_zero_commit.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_ambient_home_isolation.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_approve_reject_plan.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_approve_usage_gate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_assignment_already_recorded_daemon.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_audit_log.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_audit_outcome.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_audit_query.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_auto_loop.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_auto_release_publish_2035.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_base_checkout_restore.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_block_log.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_board_cap_762.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_board_fixture.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_board_read_path.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_board_service.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_board_state.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_board_wire.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_brain.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_branch_model.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_bug_intake.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_build_worker_image_env_update.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cargo_cache.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_ci_acceptance_gate_1950.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_ci_parity_2091.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_ci_store.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_claim.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_acceptance.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_assign.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_assign_interactive_oracle_gate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_assign_interactive_remote.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_assign_provider.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_assign_repo_drift_2219.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_audit.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_chat_continue.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_diagnose_config_provenance.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_diagnose_graph.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_doctor.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_doctor_config_free_1801.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_doctor_config_mismatch_1712.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_drive.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_drive_queue.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_escalate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_fix_headless_review.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_gate_a.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_install_drift.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_install_skills.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_issue_create_label.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_issue_reopen.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_merge.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_milestone_assign.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_milestone_capture.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_milestone_chat_add_child.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_milestone_gate_b.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_milestone_gate_c.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_milestone_order.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_milestone_remove_and_issue_close.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_milestone_ship.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_network.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_new_issue_chat.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_plans.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_portal.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_pull_artifact.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_queue.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_reattach_sessions.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_refine_board.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_release_preflight.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_release_propagate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_release_window.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_repo_2220.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_scorecard.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_set_review_findings.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_status_advisory_terminal.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_status_merge_queue.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_status_provider.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_status_review_finalizing.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_status_test_failed_tag.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_status_usage_limit.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_sync_comments_873.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_test_plan.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_track.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_tui_update.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cli_wait.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_client_base_install.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_comments.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_completion_summary.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_config.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_config_acceptance.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_config_audit.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_config_pricing.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_config_snapshot_noncanonical_2208.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_config_usage_gate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_conflict_fix.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_conflict_fix_semantic.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_coord_test.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_coord_test_runner_baseline.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_coord_test_runner_routing.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_coord_test_runner_toolchain.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_coord_web_sse_restart_live.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_coordinator_machine.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_cross_platform_imports.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_dashboard.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_dashboard_fixture.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_dashboard_terminal.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_dashboard_terminal_live.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_db.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_dead_end.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_deploy_coord_db_backup.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_deploy_coord_web_dist.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_deploy_coord_web_rollback.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_deploy_drive_queue_unit.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_deploy_manifest.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_deploy_units_lane.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_deploy_web_unit.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_deps.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_diagnose.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_dispatch.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_dispatch_target_validation.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_dist_name.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_done_housekeeping.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_drive.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_drive_queue.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_drive_state.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_drive_tmux.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_epic_up_capability_detection.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_epic_up_down_symlinked_config_1887.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_epic_up_image_provenance.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_errors.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_events.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_failure_class.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_filelock.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_finalize_interactive_exit_test_verdict.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_fix_of_force_override.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_fleet_config_health.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_fleet_health_probes.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_fleet_health_snapshot.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_freshness.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_gate_a.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_gate_b.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_gate_snapshot_staleness.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_gates.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_gather_fleet_tmux_sessions.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_generated_types_fixture.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_github_ops.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_goal.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_graph_health.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_graph_selfheal_absent_2237.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_handoff.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_checks.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_cli.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_cli_graph.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_config.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_context.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_deploy_lane_facts.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_incident_regression.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_pypi.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_registry.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_timer_active.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_toolchain.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_unit_drift.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_health_unit_enablement.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_hooks.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_human_attended_437.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_init.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_integration.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_interactive_briefing_echo.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_interactive_prefill_state.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_interactive_session_relaunch.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_interactive_test_verdict_backstop.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_interactive_token_attribution.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_interactive_worktree.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_issue_store_seam.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_liveness_auditor.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_liveness_notify.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_machine_pause.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_merge_verify.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_milestone_chat.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_milestone_dispatch.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_milestone_gate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_milestone_order.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_milestone_seam.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_mock_author.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_model_tiering.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_models.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_models_config_labels.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_needs_attention.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_network.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_new_issue_chat.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_next_release_tag.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_no_direct_gh_calls.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_node_shim.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_notifier_baseline.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_notifier_cli.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_notifier_collect.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_notifier_config.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_notifier_drive_seam.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_notifier_isolation.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_notifier_predicate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_notifier_quiet_hours.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_notifier_service.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_notify.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_notify_drain.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_openapi.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_operational_defaults.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_overlap_fence.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_overlap_predict.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_packaged_deploy_units.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_parentage.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_paste_landed.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_pipeline.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_plan_followup_approve_plan_command.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_plan_followup_pr_command.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_plan_followup_review_command.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_plan_only.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_plan_parser.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_platform_paths.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_portal_bridge.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_portal_config.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_portal_sync.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_pr_body_lint.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_prereqs.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_production_db_guard.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_progress.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_provider_seam.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_providers.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_providers_config_labels.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_providers_pty.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_quiet_hours.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_quiet_hours_store_2146.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_reap_merged_sessions.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_reap_stale_interactive_tick.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_reconcile_branch.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_reconcile_completions.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_reconcile_merges.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_reconcile_no_agent_record.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_reconcile_usage_limit_done.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_refine_chat.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_release_cordon_2101.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_release_cordon_daemon_leads_2176.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_release_cordon_deadlock_2240.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_release_propagate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_release_unified_1242.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_release_verify.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_release_window.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_remote_auto_prune.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_remote_interactive_reaper.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_repo_edit_2220.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_repo_graph_fleet_2237.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_repo_onboard_2220.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_report_result_push.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_retry.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_retry_advisory_1606.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_retry_type_1636.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_revalidate.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_review.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_review_end_review_without_verdict.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_review_parse_failure_diagnostic.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_review_reaffirm.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_review_state.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_review_verdict_backstop.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_review_verdict_override_audit.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_review_verdict_relay.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_review_zero_commits.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_scoped_review_wiring.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_scorecard.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_serve.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_serve_app_board_trim.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_session.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_slice_issue_attribution.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_smoke.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_smoke_live_checkout_restore.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_smoke_workflow.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_spend_ceiling.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_spend_ceiling_coordinator.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_split.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_split_work.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_stage_projection.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_stalled_pipeline.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_state.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_state_review_findings_daemon.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_status_fleet_footer.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_stop_1567.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_stuck.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_terminal_command.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_test_author.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_test_chat.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_test_orchestrator.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_test_report.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_test_verdict_parsing.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_test_verdict_transcript_floor.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_thin_client_board_audit.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_thin_client_config_load_1080.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_thin_client_daemon_routing_906.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_tmux_host.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_tmux_session.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_transcript_floor.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_usage.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_usage_limits.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_usage_rollup.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_venv_live_install_2121.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_version_single_source.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_watch.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_worker_events.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_worker_image_pin_sync.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_worker_safety.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_worker_test_scoping.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_worktree.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tests/test_worktree_rmtree_chokepoint.py +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/cargo-config-local-quadraui.toml.example +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/audit.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/chat.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/data.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/dialogs.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/drive.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/drive_queue.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/escalation.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/events.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/fleet_health.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/fleet_sessions.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/fleet_terminals.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/format.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/milestone_dag.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/msv.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/pipeline.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/plans.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/render.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/sessions.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/settings_ui.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/sidebar.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/terminal.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/app/workspace.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/bin/gtk.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/commands.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/lib.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/main.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/src/settings.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/tests/acceptance.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/tests/cli.rs +0 -0
- {code_coordinator-0.5.102 → code_coordinator-0.5.105}/tui/tests/fixtures/board_sample.json +0 -0
|
@@ -4481,6 +4481,63 @@ def _record_expected_red_audit(
|
|
|
4481
4481
|
)
|
|
4482
4482
|
|
|
4483
4483
|
|
|
4484
|
+
def _acceptance_patch_id_matches(
|
|
4485
|
+
entry: "QueuedMerge", acceptance_sha: str, gh_ops: "GhOps",
|
|
4486
|
+
) -> bool:
|
|
4487
|
+
"""#2298: True when *acceptance_sha* — the commit the trust-gate verdict
|
|
4488
|
+
(``coord acceptance record``) was recorded against — introduced the
|
|
4489
|
+
*same content* as the commit that just merged, even though the two
|
|
4490
|
+
SHAs differ.
|
|
4491
|
+
|
|
4492
|
+
The merge queue's own ``checks_stale``/``smoke_required`` gates force a
|
|
4493
|
+
PR sitting behind a moved base to rebase before it can merge at all (a
|
|
4494
|
+
re-run CI needs a fresh SHA to attach to); rebasing rewrites
|
|
4495
|
+
``branch_head_sha`` by construction. :func:`_maybe_clear_expected_red`
|
|
4496
|
+
treating that SHA change alone as "the content changed" made the two
|
|
4497
|
+
gates mutually unsatisfiable on any PR that had to rebase — every such
|
|
4498
|
+
merge skipped its ``expected_red`` clear and manually needed one, #2298.
|
|
4499
|
+
|
|
4500
|
+
This mirrors the exact rebase-survives-content fingerprint
|
|
4501
|
+
``has_approved_review`` already uses for the review gate (#1475): a
|
|
4502
|
+
content-addressed patch-id (``git patch-id --stable`` over the unified
|
|
4503
|
+
diff, via ``gh_ops.get_branch_patch_id``) is insensitive to which
|
|
4504
|
+
commit the diff is replayed onto, so a pure rebase (no conflict, no new
|
|
4505
|
+
commits) produces the *same* patch-id from a *different* SHA, while a
|
|
4506
|
+
genuine content change (a conflict resolved differently, an extra
|
|
4507
|
+
commit) does not.
|
|
4508
|
+
|
|
4509
|
+
Compares ``entry.branch_patch_id`` — the diff the commit that just
|
|
4510
|
+
merged actually introduced, backfilled on demand via
|
|
4511
|
+
:func:`_backfill_branch_patch_id` when `process()` never needed it
|
|
4512
|
+
(e.g. neither review nor smoke was required for this entry, the only
|
|
4513
|
+
two gates that consult it pre-merge) — against a patch-id computed
|
|
4514
|
+
fresh for *acceptance_sha* against ``entry.target_branch``.
|
|
4515
|
+
*acceptance_sha* need not be any branch's current tip: per
|
|
4516
|
+
:func:`coord.github_ops.get_compare_diff`'s docstring, GitHub's
|
|
4517
|
+
three-dot compare API accepts a raw commit SHA for *head* exactly like
|
|
4518
|
+
a branch name, the same trick :func:`has_approved_review`'s #1476
|
|
4519
|
+
scoped-re-review path already relies on for an old, superseded review
|
|
4520
|
+
SHA.
|
|
4521
|
+
|
|
4522
|
+
Returns ``False`` — fail closed — whenever either side is unavailable
|
|
4523
|
+
(no patch-id support, a `gh_ops` failure, or *acceptance_sha* no longer
|
|
4524
|
+
resolving, e.g. long since garbage-collected): "cannot confirm
|
|
4525
|
+
identical content" must never read as "confirmed identical".
|
|
4526
|
+
"""
|
|
4527
|
+
branch_patch_id = getattr(entry, "branch_patch_id", None)
|
|
4528
|
+
if branch_patch_id is None:
|
|
4529
|
+
branch_patch_id = _backfill_branch_patch_id(entry, gh_ops)
|
|
4530
|
+
if branch_patch_id is None:
|
|
4531
|
+
return False
|
|
4532
|
+
try:
|
|
4533
|
+
acceptance_patch_id = gh_ops.get_branch_patch_id(
|
|
4534
|
+
entry.repo_github, entry.target_branch, acceptance_sha,
|
|
4535
|
+
)
|
|
4536
|
+
except Exception: # noqa: BLE001 — fail-safe, matches _backfill_branch_patch_id
|
|
4537
|
+
acceptance_patch_id = None
|
|
4538
|
+
return acceptance_patch_id is not None and acceptance_patch_id == branch_patch_id
|
|
4539
|
+
|
|
4540
|
+
|
|
4484
4541
|
def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> MergeEvent | None:
|
|
4485
4542
|
"""#2164: right after *entry*'s PR has actually merged into
|
|
4486
4543
|
``entry.target_branch``, clear any of its issue's ``expected_red``
|
|
@@ -4508,6 +4565,17 @@ def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> Merge
|
|
|
4508
4565
|
printing that same loud, actionable-looking text on every ordinary
|
|
4509
4566
|
merge fleet-wide, contradicting the acceptance criterion that exempt
|
|
4510
4567
|
issues and driverless repos stay unaffected.
|
|
4568
|
+
|
|
4569
|
+
#2298: the SHA-exact guard below is no longer the only path to a
|
|
4570
|
+
clear. ``checks_stale``/``smoke_required`` refuse a PR whose CI
|
|
4571
|
+
predates the current base, so a PR that sits long enough for the base
|
|
4572
|
+
to move must rebase to merge at all — which rewrites
|
|
4573
|
+
``entry.branch_head_sha`` even when nothing about the PR's own diff
|
|
4574
|
+
changed. Comparing SHAs alone made that guard and those gates mutually
|
|
4575
|
+
unsatisfiable on exactly the PRs this whole trust gate exists to
|
|
4576
|
+
protect (every rebased oracle-loop merge). See
|
|
4577
|
+
:func:`_acceptance_patch_id_matches` for the content-addressed
|
|
4578
|
+
fallback that tells a pure rebase apart from a genuine content change.
|
|
4511
4579
|
"""
|
|
4512
4580
|
if entry.assignment_type not in CLOSES_ISSUE_TYPES:
|
|
4513
4581
|
return None
|
|
@@ -4544,18 +4612,41 @@ def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> Merge
|
|
|
4544
4612
|
)
|
|
4545
4613
|
return MergeEvent(entry, "expected_red_clear_skipped_no_acceptance", msg)
|
|
4546
4614
|
acceptance_sha = getattr(work, "acceptance_sha", None)
|
|
4547
|
-
|
|
4615
|
+
sha_matches = acceptance_sha is not None and acceptance_sha == entry.branch_head_sha
|
|
4616
|
+
# #2298: a bare SHA mismatch no longer voids the verdict outright.
|
|
4617
|
+
# `checks_stale`/`smoke_required` force a rebase before a PR sitting
|
|
4618
|
+
# behind a moved base can merge at all — which rewrites
|
|
4619
|
+
# `branch_head_sha` on every such PR by construction, making this
|
|
4620
|
+
# guard and those gates mutually unsatisfiable pre-#2298 (see the
|
|
4621
|
+
# issue). Mirror `has_approved_review`'s #1475 patch-id fallback: a
|
|
4622
|
+
# SHA mismatch whose content-addressed patch-id still matches is a
|
|
4623
|
+
# pure rebase, not a stale observation.
|
|
4624
|
+
patch_id_verified = (
|
|
4625
|
+
acceptance_sha is not None
|
|
4626
|
+
and not sha_matches
|
|
4627
|
+
and _acceptance_patch_id_matches(entry, acceptance_sha, gh_ops)
|
|
4628
|
+
)
|
|
4629
|
+
if not sha_matches and not patch_id_verified:
|
|
4548
4630
|
# The recorded trust-gate verdict isn't for the exact commit that
|
|
4549
|
-
# just merged
|
|
4550
|
-
#
|
|
4551
|
-
#
|
|
4552
|
-
#
|
|
4553
|
-
#
|
|
4554
|
-
#
|
|
4631
|
+
# just merged, and its diff doesn't match the merged commit's diff
|
|
4632
|
+
# either (acceptance never ran, a genuine content change landed
|
|
4633
|
+
# after the last `record`, or the patch-id comparison itself
|
|
4634
|
+
# couldn't be confirmed) — skip rather than clear on a stale
|
|
4635
|
+
# observation. #2298 (also worth fixing here): the issue this
|
|
4636
|
+
# entry closed is already closed by the time this runs, so
|
|
4637
|
+
# `coord acceptance record --sha` (which targets an *open* issue's
|
|
4638
|
+
# work assignment) has nothing left to attach to; point at the
|
|
4639
|
+
# remedy that actually works from here instead.
|
|
4555
4640
|
msg = (
|
|
4556
|
-
"acceptance_sha does not match the merged commit
|
|
4557
|
-
"
|
|
4558
|
-
"
|
|
4641
|
+
"acceptance_sha does not match the merged commit, and its "
|
|
4642
|
+
"content-addressed patch-id does not confirm a pure rebase "
|
|
4643
|
+
"either (#2298) — skipping expected_red clear. If this was "
|
|
4644
|
+
"genuinely just a rebase onto a moved base, clear by hand: "
|
|
4645
|
+
f"`coord acceptance expected-red {entry.repo_name} --clear "
|
|
4646
|
+
f"--issue {entry.issue_number}`. If the content actually "
|
|
4647
|
+
"changed, a fresh `coord acceptance record` against the "
|
|
4648
|
+
"merged SHA (while the issue was still open) was the correct "
|
|
4649
|
+
"fix and did not happen."
|
|
4559
4650
|
)
|
|
4560
4651
|
_record_expected_red_audit(
|
|
4561
4652
|
entry, "expected_red_clear_skipped_sha_mismatch", msg,
|
|
@@ -4572,6 +4663,19 @@ def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> Merge
|
|
|
4572
4663
|
# manifest, so looking this up afterwards would just find the ids the
|
|
4573
4664
|
# clear itself just removed (#2266 review non-blocking finding).
|
|
4574
4665
|
ids = _expected_red_ids_for_entry(entry, gh_ops)
|
|
4666
|
+
if patch_id_verified:
|
|
4667
|
+
# #2298: name the arm taken — a durable row independent of whether
|
|
4668
|
+
# there ends up being anything to clear (the "no_op" branch below
|
|
4669
|
+
# never gets one of those), so this rebase-not-content-change call
|
|
4670
|
+
# is queryable on its own, the same way every other skip/clear
|
|
4671
|
+
# branch here names itself rather than staying silent (#2199).
|
|
4672
|
+
_record_expected_red_audit(
|
|
4673
|
+
entry, "expected_red_sha_mismatch_patch_id_verified",
|
|
4674
|
+
"acceptance_sha does not match the merged commit, but its "
|
|
4675
|
+
"content-addressed patch-id does — a pure rebase, not a "
|
|
4676
|
+
"content change (#2298); proceeding with expected_red clear",
|
|
4677
|
+
test_ids=ids,
|
|
4678
|
+
)
|
|
4575
4679
|
msg = clear_expected_red_via_pr(
|
|
4576
4680
|
entry.repo_github, entry.repo_name, entry.target_branch, entry.issue_number,
|
|
4577
4681
|
gh_ops=gh_ops,
|
|
@@ -4594,6 +4698,13 @@ def _maybe_clear_expected_red(entry: QueuedMerge, board, gh_ops: GhOps) -> Merge
|
|
|
4594
4698
|
"pending_retry": "expected_red_clear_pending",
|
|
4595
4699
|
"failed": "expected_red_clear_failed",
|
|
4596
4700
|
}[status]
|
|
4701
|
+
if patch_id_verified:
|
|
4702
|
+
# #2298: keep the arm visible on the terminal `coord merge` line
|
|
4703
|
+
# too, not just in the audit row above.
|
|
4704
|
+
msg = (
|
|
4705
|
+
f"{msg} (acceptance_sha rebased since verdict — content "
|
|
4706
|
+
"verified identical via patch-id, #2298)"
|
|
4707
|
+
)
|
|
4597
4708
|
# #2266 review (non-blocking finding): `clear_expected_red_via_pr`
|
|
4598
4709
|
# never raises — every genuine failure degrades to a "warning: ..."
|
|
4599
4710
|
# string. Make that durable too, not just a merge-output line: a
|
|
@@ -59,6 +59,9 @@ __all__ = [
|
|
|
59
59
|
"ReportParam",
|
|
60
60
|
"ReportDef",
|
|
61
61
|
"ColumnMeta",
|
|
62
|
+
"ChartSeries",
|
|
63
|
+
"ChartSpec",
|
|
64
|
+
"CHART_KINDS",
|
|
62
65
|
"ReportResult",
|
|
63
66
|
"REPORTS",
|
|
64
67
|
"catalogue",
|
|
@@ -78,6 +81,7 @@ __all__ = [
|
|
|
78
81
|
"QUEUE_OUTCOMES_WINDOW_CHOICES",
|
|
79
82
|
"resolve_queue_outcomes_window",
|
|
80
83
|
"fold_queue_outcomes",
|
|
84
|
+
"queue_outcomes_chart",
|
|
81
85
|
"run_queue_outcomes",
|
|
82
86
|
"parse_duration",
|
|
83
87
|
"result_to_csv",
|
|
@@ -190,6 +194,90 @@ class ColumnMeta:
|
|
|
190
194
|
}
|
|
191
195
|
|
|
192
196
|
|
|
197
|
+
# ── chart declaration (#2271) ──────────────────────────────────────────────
|
|
198
|
+
#
|
|
199
|
+
# A report says "this table also reads as a chart"; it does NOT ship a second
|
|
200
|
+
# copy of the numbers. Every series names a `columns[]` id and the renderer
|
|
201
|
+
# reads the same `rows` the table renders, so there is exactly one source of
|
|
202
|
+
# truth, the table stays the fallback rendering, and `result_to_csv` (#1765)
|
|
203
|
+
# needs no change at all — it is driven by `columns`/`rows`/`totals` and never
|
|
204
|
+
# looks at this block.
|
|
205
|
+
#
|
|
206
|
+
# THE COMPATIBILITY RULE, same as `ColumnMeta.kind`'s (#1760): a client that
|
|
207
|
+
# does not understand this block, or meets a `kind` it predates, **renders the
|
|
208
|
+
# table and ignores the chart**. It must never fail to parse and must never
|
|
209
|
+
# leave a hole where the chart would have gone. That matters more than usual
|
|
210
|
+
# here because coord-tui ships as a per-host locally-built binary, outside
|
|
211
|
+
# propagation's reach, so the fleet routinely runs mixed versions.
|
|
212
|
+
|
|
213
|
+
#: Open vocabulary — the kinds a client is *expected* to know today. A newer
|
|
214
|
+
#: daemon may name one that is not here; see the compatibility rule above.
|
|
215
|
+
CHART_KINDS = ("bar", "line", "sparkline")
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
@dataclass(frozen=True)
|
|
219
|
+
class ChartSeries:
|
|
220
|
+
"""One series of a :class:`ChartSpec`, derived from an existing column.
|
|
221
|
+
|
|
222
|
+
``column`` is a ``ReportResult.columns`` id whose per-row value supplies
|
|
223
|
+
the y-values; ``label`` is what the legend shows. ``color`` is an
|
|
224
|
+
optional ``"#rrggbb"`` hint — when :attr:`ChartSpec.group_by` is set the
|
|
225
|
+
series are generated per group and the backend palette picks the colours
|
|
226
|
+
instead, because one declared colour cannot describe N groups.
|
|
227
|
+
"""
|
|
228
|
+
|
|
229
|
+
label: str
|
|
230
|
+
column: str
|
|
231
|
+
color: str | None = None
|
|
232
|
+
|
|
233
|
+
def to_dict(self) -> dict[str, Any]:
|
|
234
|
+
return {"label": self.label, "column": self.column, "color": self.color}
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
@dataclass(frozen=True)
|
|
238
|
+
class ChartSpec:
|
|
239
|
+
"""An optional chart rendering of a :class:`ReportResult`'s own rows.
|
|
240
|
+
|
|
241
|
+
Two shapes, and which one you get depends on ``group_by``:
|
|
242
|
+
|
|
243
|
+
* **``group_by is None`` — one data point per row, in the report's
|
|
244
|
+
canonical row order.** ``x`` names the column supplying each point's
|
|
245
|
+
category/time label; each :class:`ChartSeries` reads its own column
|
|
246
|
+
straight off the row. This is the "one bar per category" shape.
|
|
247
|
+
* **``group_by`` set — a pivot.** The x-axis is the *distinct* values of
|
|
248
|
+
``x`` in first-appearance order, and one output series is produced per
|
|
249
|
+
distinct ``group_by`` value. Rows landing in the same ``(group, x)``
|
|
250
|
+
cell are **summed**, and an empty cell is ``0`` — so this shape is for
|
|
251
|
+
magnitudes (counts, totals), not for averages or rates. This is the
|
|
252
|
+
"one trendline per bucket" shape that a long-form result needs.
|
|
253
|
+
|
|
254
|
+
``stacked`` is bar-only and ignored by every other kind. Rendering a
|
|
255
|
+
multi-series bar chart at all needs quadraui#584; a client whose pinned
|
|
256
|
+
build predates it must degrade the section to a table with a stated
|
|
257
|
+
reason rather than draw a chart that silently omits every series but the
|
|
258
|
+
first.
|
|
259
|
+
"""
|
|
260
|
+
|
|
261
|
+
kind: str
|
|
262
|
+
series: tuple[ChartSeries, ...]
|
|
263
|
+
x: str | None = None
|
|
264
|
+
group_by: str | None = None
|
|
265
|
+
stacked: bool = False
|
|
266
|
+
title: str = ""
|
|
267
|
+
y_label: str = ""
|
|
268
|
+
|
|
269
|
+
def to_dict(self) -> dict[str, Any]:
|
|
270
|
+
return {
|
|
271
|
+
"kind": self.kind,
|
|
272
|
+
"series": [s.to_dict() for s in self.series],
|
|
273
|
+
"x": self.x,
|
|
274
|
+
"group_by": self.group_by,
|
|
275
|
+
"stacked": self.stacked,
|
|
276
|
+
"title": self.title,
|
|
277
|
+
"y_label": self.y_label,
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
|
|
193
281
|
@dataclass
|
|
194
282
|
class ReportResult:
|
|
195
283
|
"""The wire contract (#1741 renders against these exact field names).
|
|
@@ -210,6 +298,12 @@ class ReportResult:
|
|
|
210
298
|
before. Identity columns are deliberately *absent* from the dict rather
|
|
211
299
|
than filled with a placeholder — a renderer that wants a ``Σ`` marker
|
|
212
300
|
picks one itself, and one that doesn't leaves the cell blank.
|
|
301
|
+
|
|
302
|
+
``chart`` (#2271) is an optional declaration that this result also reads
|
|
303
|
+
as a chart, derived from the very columns the table renders — see
|
|
304
|
+
:class:`ChartSpec`. **Additive and defaulting to ``None``**, and a
|
|
305
|
+
client that ignores the key (or meets a ``kind`` it predates) renders the
|
|
306
|
+
table exactly as it did before.
|
|
213
307
|
"""
|
|
214
308
|
|
|
215
309
|
report_id: str
|
|
@@ -220,6 +314,7 @@ class ReportResult:
|
|
|
220
314
|
notes: list[str]
|
|
221
315
|
column_meta: list[ColumnMeta] = field(default_factory=list)
|
|
222
316
|
totals: dict[str, Any] | None = None
|
|
317
|
+
chart: ChartSpec | None = None
|
|
223
318
|
|
|
224
319
|
def to_dict(self) -> dict[str, Any]:
|
|
225
320
|
return {
|
|
@@ -231,6 +326,7 @@ class ReportResult:
|
|
|
231
326
|
"rows": list(self.rows),
|
|
232
327
|
"notes": list(self.notes),
|
|
233
328
|
"totals": None if self.totals is None else dict(self.totals),
|
|
329
|
+
"chart": None if self.chart is None else self.chart.to_dict(),
|
|
234
330
|
}
|
|
235
331
|
|
|
236
332
|
|
|
@@ -1677,6 +1773,50 @@ def fold_queue_outcomes(
|
|
|
1677
1773
|
rows=rows,
|
|
1678
1774
|
notes=notes,
|
|
1679
1775
|
totals=totals,
|
|
1776
|
+
chart=queue_outcomes_chart(rows, n_periods),
|
|
1777
|
+
)
|
|
1778
|
+
|
|
1779
|
+
|
|
1780
|
+
def queue_outcomes_chart(
|
|
1781
|
+
rows: Sequence[Mapping[str, Any]], n_periods: int
|
|
1782
|
+
) -> ChartSpec | None:
|
|
1783
|
+
"""The chart declaration for a ``queue-outcomes`` fold (#2271).
|
|
1784
|
+
|
|
1785
|
+
Exactly the two views the report's own description already promises:
|
|
1786
|
+
``24h`` is a single period, so it is **one stacked bar per bucket** over
|
|
1787
|
+
the categories in it; ``7d``/``4w`` are the same arithmetic in 7 daily /
|
|
1788
|
+
4 weekly points, so they are **one trendline per bucket** over
|
|
1789
|
+
``period_start``. Both derive from ``count`` — the column the table
|
|
1790
|
+
renders — so there is nothing to keep in sync.
|
|
1791
|
+
|
|
1792
|
+
``None`` when there is nothing to plot: an empty fold is an EMPTY result,
|
|
1793
|
+
and an axis with no marks on it reads as a zero score rather than as no
|
|
1794
|
+
measurement.
|
|
1795
|
+
"""
|
|
1796
|
+
if not rows:
|
|
1797
|
+
return None
|
|
1798
|
+
if n_periods > 1:
|
|
1799
|
+
return ChartSpec(
|
|
1800
|
+
kind="line",
|
|
1801
|
+
series=(ChartSeries(label="Entries", column="count"),),
|
|
1802
|
+
x="period_start",
|
|
1803
|
+
group_by="bucket",
|
|
1804
|
+
title="Outcomes per period",
|
|
1805
|
+
y_label="Entries",
|
|
1806
|
+
)
|
|
1807
|
+
# `x` and `group_by` are deliberately the same column. A terminal chart
|
|
1808
|
+
# has a legend but no per-tick category text, so the legend is the only
|
|
1809
|
+
# place a bucket NAME can appear — grouping on the axis column is what
|
|
1810
|
+
# puts "succeeded / auto_resolved_* / human / open" on screen next to its
|
|
1811
|
+
# own colour, instead of five anonymous bars.
|
|
1812
|
+
return ChartSpec(
|
|
1813
|
+
kind="bar",
|
|
1814
|
+
series=(ChartSeries(label="Entries", column="count"),),
|
|
1815
|
+
x="bucket",
|
|
1816
|
+
group_by="bucket",
|
|
1817
|
+
stacked=True,
|
|
1818
|
+
title="Outcomes by bucket",
|
|
1819
|
+
y_label="Entries",
|
|
1680
1820
|
)
|
|
1681
1821
|
|
|
1682
1822
|
|
|
@@ -3566,6 +3566,10 @@ def _openapi_spec() -> dict:
|
|
|
3566
3566
|
"type": ["object", "null"],
|
|
3567
3567
|
"description": "#1763: optional grand-total row keyed by the same column ids as `rows`. `null` for reports with no meaningful sum (issue-activity, drive-queue-status); a client that ignores it renders exactly as before.",
|
|
3568
3568
|
},
|
|
3569
|
+
"chart": {
|
|
3570
|
+
"type": ["object", "null"],
|
|
3571
|
+
"description": "#2271: optional chart declaration — `kind` (open vocabulary: bar/line/sparkline), `series[]` each naming a `columns[]` id, `x`, `group_by`, `stacked`. It carries NO numbers of its own; the renderer reads the same `rows` the table does. A client that ignores the key, or meets a `kind` it predates, renders the table and no chart.",
|
|
3572
|
+
},
|
|
3569
3573
|
},
|
|
3570
3574
|
"required": [
|
|
3571
3575
|
"report_id", "generated_at", "window",
|
|
@@ -1118,6 +1118,23 @@ class _ExpectedRedGh(FakeGh):
|
|
|
1118
1118
|
return "new-sha"
|
|
1119
1119
|
|
|
1120
1120
|
|
|
1121
|
+
class _PatchIdGh(_ExpectedRedGh):
|
|
1122
|
+
"""#2298: `_ExpectedRedGh` + a controllable `get_branch_patch_id`, keyed
|
|
1123
|
+
by the *branch* arg (either the live PR branch name or a bare
|
|
1124
|
+
acceptance_sha) so a test can simulate "same content, different SHA"
|
|
1125
|
+
(a pure rebase) independently of `get_branch_sha`/`branch_head_sha`.
|
|
1126
|
+
"""
|
|
1127
|
+
|
|
1128
|
+
def __init__(self, *, patch_ids: dict[str, str | None], **kw):
|
|
1129
|
+
super().__init__(**kw)
|
|
1130
|
+
self._patch_ids = patch_ids
|
|
1131
|
+
self.patch_id_calls: list[tuple[str, str, str]] = []
|
|
1132
|
+
|
|
1133
|
+
def get_branch_patch_id(self, repo: str, base: str, branch: str) -> str | None:
|
|
1134
|
+
self.patch_id_calls.append((repo, base, branch))
|
|
1135
|
+
return self._patch_ids.get(branch)
|
|
1136
|
+
|
|
1137
|
+
|
|
1121
1138
|
class TestExpectedRedClearOnMerge:
|
|
1122
1139
|
"""#2164 review (blocking finding 1): clearing `expected_red` must wait
|
|
1123
1140
|
for the fix's own PR to actually merge into the default branch, not
|
|
@@ -1372,6 +1389,98 @@ class TestExpectedRedClearOnMerge:
|
|
|
1372
1389
|
"SELECT 1 FROM audit_log WHERE event_type = 'expected_red_clear'",
|
|
1373
1390
|
).fetchall()
|
|
1374
1391
|
|
|
1392
|
+
# ── #2298: SHA mismatch ≠ content change ────────────────────────────
|
|
1393
|
+
|
|
1394
|
+
def test_clears_when_sha_mismatches_but_patch_id_confirms_a_pure_rebase(
|
|
1395
|
+
self,
|
|
1396
|
+
) -> None:
|
|
1397
|
+
"""#2298: `checks_stale`/`smoke_required` force a rebase before a
|
|
1398
|
+
PR sitting behind a moved base can merge at all — which rewrites
|
|
1399
|
+
`branch_head_sha` even when nothing about the PR's own diff
|
|
1400
|
+
changed. A patch-id match (the branch's current diff against
|
|
1401
|
+
target == the diff `acceptance_sha` introduced against target)
|
|
1402
|
+
must clear exactly like an exact-SHA match does, not skip."""
|
|
1403
|
+
work = self._work("w1", acceptance_state="passed", acceptance_sha="old-sha")
|
|
1404
|
+
board = self._board(completed=[work])
|
|
1405
|
+
gh = _PatchIdGh(
|
|
1406
|
+
branch_sha="new-sha", # branch_head_sha != acceptance_sha
|
|
1407
|
+
patch_ids={"worker/w1": "same-patch", "old-sha": "same-patch"},
|
|
1408
|
+
)
|
|
1409
|
+
|
|
1410
|
+
events = process([_q("w1", size=10)], gh, board=board)
|
|
1411
|
+
|
|
1412
|
+
assert events[-1].kind == "expected_red_clear"
|
|
1413
|
+
assert "ms01::a" in events[-1].message
|
|
1414
|
+
assert "patch-id" in events[-1].message # names the arm it took
|
|
1415
|
+
assert gh.update_repo_file_calls # the manifest text was actually edited
|
|
1416
|
+
|
|
1417
|
+
def test_still_skips_when_sha_mismatches_and_patch_id_also_differs(self) -> None:
|
|
1418
|
+
"""The counterpart: content genuinely changed after the verdict
|
|
1419
|
+
was recorded (a conflict resolved differently, an extra commit) —
|
|
1420
|
+
must still skip, same named event as a bare SHA mismatch."""
|
|
1421
|
+
work = self._work("w1", acceptance_state="passed", acceptance_sha="old-sha")
|
|
1422
|
+
board = self._board(completed=[work])
|
|
1423
|
+
gh = _PatchIdGh(
|
|
1424
|
+
branch_sha="new-sha",
|
|
1425
|
+
patch_ids={"worker/w1": "patch-new", "old-sha": "patch-old"},
|
|
1426
|
+
)
|
|
1427
|
+
|
|
1428
|
+
events = process([_q("w1", size=10)], gh, board=board)
|
|
1429
|
+
|
|
1430
|
+
assert events[-1].kind == "expected_red_clear_skipped"
|
|
1431
|
+
assert not gh.update_repo_file_calls
|
|
1432
|
+
|
|
1433
|
+
def test_still_skips_when_patch_id_is_unavailable(self) -> None:
|
|
1434
|
+
"""Fail closed: a SHA mismatch with no patch-id on either side
|
|
1435
|
+
(an older `gh_ops`, or a lookup failure) must skip exactly like
|
|
1436
|
+
before #2298 — "cannot confirm identical" is never "confirmed"."""
|
|
1437
|
+
work = self._work("w1", acceptance_state="passed", acceptance_sha="old-sha")
|
|
1438
|
+
board = self._board(completed=[work])
|
|
1439
|
+
gh = _PatchIdGh(branch_sha="new-sha", patch_ids={}) # every lookup -> None
|
|
1440
|
+
|
|
1441
|
+
events = process([_q("w1", size=10)], gh, board=board)
|
|
1442
|
+
|
|
1443
|
+
assert events[-1].kind == "expected_red_clear_skipped"
|
|
1444
|
+
assert not gh.update_repo_file_calls
|
|
1445
|
+
|
|
1446
|
+
def test_patch_id_verified_clear_writes_a_distinct_durable_audit_row(
|
|
1447
|
+
self, coord_db,
|
|
1448
|
+
) -> None:
|
|
1449
|
+
"""The rebase-not-content-change arm is queryable on its own —
|
|
1450
|
+
not just implied by the eventual `expected_red_clear` row — the
|
|
1451
|
+
same "name every branch" posture #2199/#2266 already established
|
|
1452
|
+
for the other arms of this function."""
|
|
1453
|
+
work = self._work("w1", acceptance_state="passed", acceptance_sha="old-sha")
|
|
1454
|
+
board = self._board(completed=[work])
|
|
1455
|
+
gh = _PatchIdGh(
|
|
1456
|
+
branch_sha="new-sha",
|
|
1457
|
+
patch_ids={"worker/w1": "same-patch", "old-sha": "same-patch"},
|
|
1458
|
+
)
|
|
1459
|
+
|
|
1460
|
+
process([_q("w1", size=10)], gh, board=board)
|
|
1461
|
+
|
|
1462
|
+
rows = coord_db.execute(
|
|
1463
|
+
"SELECT issue FROM audit_log "
|
|
1464
|
+
"WHERE event_type = 'expected_red_sha_mismatch_patch_id_verified'",
|
|
1465
|
+
).fetchall()
|
|
1466
|
+
assert len(rows) == 1
|
|
1467
|
+
assert rows[0]["issue"] == 1
|
|
1468
|
+
|
|
1469
|
+
def test_skip_remedy_points_at_a_command_that_works_post_merge(self) -> None:
|
|
1470
|
+
"""#2298 (also worth fixing here): the pre-#2298 advice —
|
|
1471
|
+
`coord acceptance record --sha <merged sha>` — targets an open
|
|
1472
|
+
issue's live work assignment. By the time this guard skips, the
|
|
1473
|
+
issue this entry closed is already closed (`gh_ops.close_issue`
|
|
1474
|
+
ran just before this), so that advice leads nowhere. Point at the
|
|
1475
|
+
remedy that actually works from the state the operator is in."""
|
|
1476
|
+
work = self._work("w1", acceptance_state="passed", acceptance_sha="an-old-sha")
|
|
1477
|
+
board = self._board(completed=[work])
|
|
1478
|
+
gh = _ExpectedRedGh(branch_sha="cafesha") # branch_head_sha != acceptance_sha
|
|
1479
|
+
|
|
1480
|
+
events = process([_q("w1", size=10)], gh, board=board)
|
|
1481
|
+
|
|
1482
|
+
assert "coord acceptance expected-red api --clear --issue 1" in events[-1].message
|
|
1483
|
+
|
|
1375
1484
|
|
|
1376
1485
|
class _TestAuthorGateGh(FakeGh):
|
|
1377
1486
|
"""#2191: FakeGh + the API-only manifest/issue-state surface
|