mirror of
https://github.com/CopilotKit/CopilotKit.git
synced 2026-09-14 16:26:20 +08:00
ca12d09c36
## What Adds **cvdiag** — a permanent, always-available observability subsystem for the showcase, built to diagnose the red↔green cell flap on the staging dashboard and to make that diagnosis a dashboard query rather than a multi-day forensic hunt in the future. Captures the full request path with `X-Test-Id` correlation across **probe → backend → aimock → edge**, across every integration (TypeScript, Python, Java/spring-ai, .NET): - Per-language backend emitters (canonical + staged/compile-linked mirrors), all sharing one schema (`schema.json`, closed-world `additionalProperties:false`). - CREATE-only writes to two new PocketBase collections: `cvdiag_events` and `cvdiag_raw_byte_samples` (additive migrations — no existing data touched). - An 8-class flap classifier mapping to the observed failure signatures (`sse-missing` / `text-unstable` / `dom-missing`). - DEBUG-tier raw-byte capture (secret-scrubbed) and HMAC-guarded A/B edge-interference detection. ## Why The runId flap-fix (`cdc1e90e`, 2026-06-09) did **not** fully resolve the flap — it was still observed 2026-06-19. cvdiag exists so the *remaining* cause is observed live with full correlation instead of inferred. ## Safety / enablement - **Inert by default.** With `CVDIAG_BACKEND_EMITTER` unset the subsystem performs zero host mutation (no logging-config changes, no threads/tasks, no stdout) — verified by `test_cvdiag_inert_when_disabled`. **To accumulate data, set `CVDIAG_BACKEND_EMITTER=1` on the showcase services.** - All per-language scrubbers match the canonical `scrubSecrets` (sk-/base64url, Bearer, colon-less URL userinfo, size-guard) — verified with real toolchains (vitest / mvn / dotnet). - Merged latest `main` (only conflict: a clean `.csproj` include union). ## Verification - harness `tsc --noEmit` ✓ · `src/cvdiag` vitest 251/251 ✓ · `cvdiag-stage-ts --check` in-sync ✓ - Java MessageScrubber 17/17 (mvn) ✓ · .NET CvdiagBackend 5/5 (dotnet sdk:9.0) ✓ · Python emitters 93/93 (3.12) ✓ 🤖 Generated with [Claude Code](https://claude.com/claude-code)