# Audit-baselines port — round-trip validation against live Rust data Proves the Go port at `internal/distillation/audit_baseline.go` parses, round-trips, and produces meaningful drift signal against the live Rust-side `data/_kb/audit_baselines.jsonl`. Same shape of proof as `embed_parity.sh` for the embed endpoint earlier in the session — port verified against real-shape data, not just fixtures. ## Verdict **PASS.** The Go port reads the live file end-to-end. JSON round-trip is byte-equal on every field. `BuildAuditDriftTable` produces the expected verdict tiers when fed real-history data. ## Live-data probe output ``` loaded 7 baselines from /home/profit/lakehouse/data/_kb/audit_baselines.jsonl ✓ round-trip parity (encode → decode → match) ✓ LoadLastBaseline returns the most recent entry Lineage drift: first (2026-04-27T04:47:30.220Z) → last (2026-04-27T15:43:38.019Z) span: 7 entries metric baseline current Δ% flag p2_evidence_rows 12 82 +583.3% warn p2_evidence_skips 2 2 +0.0% ok p3_accepted 0 386 - warn p3_human 0 480 - warn p3_partial 0 132 - warn p3_rejected 0 57 - warn p4_pref_pairs 83 83 +0.0% ok p4_rag_rows 448 448 +0.0% ok p4_sft_rows 353 353 +0.0% ok p4_total_quarantined 1325 1325 +0.0% ok verdict: 5/10 metrics flagged warn, 0 first-run ``` ## What this confirms 1. **Field-name parity is exact.** All 10 metric fields decode into the Go `AuditBaseline.Metrics map[string]int64` shape; no silently-dropped keys. 2. **Header fields map cleanly.** `recorded_at` + `git_commit` are the only non-Metrics fields in the Rust shape, both already present on the Go struct. 3. **The zero-baseline edge case fires correctly.** `p3_accepted` went 0→386 between first and last baseline — a metric that didn't exist in the early window. The drift table flagged it `warn` (zero→nonzero is always notable) without throwing on the division-by-zero. This was the specific case `TestBuildAuditDriftTable_ZeroBaseline` was designed to lock, and it's hitting the real-data behavior I wanted. 4. **The +583% drift on `p2_evidence_rows` is honest signal.** The pipeline scaled from 12 to 82 evidence rows over the captured window — well above the 20% warn threshold. Operator running this in CI would see "the audit pipeline output 7× more evidence than baseline; investigate" — which is exactly the point of audit_baselines. ## Repro ```bash go run ./scripts/cutover/audit_baselines_validate # Or override path: go run ./scripts/cutover/audit_baselines_validate \ -path /path/to/audit_baselines.jsonl ``` ## What this does NOT prove - The Go-side audit-FULL pipeline that PRODUCES baselines doesn't exist yet — only the load/append/drift substrate. Operators running audit-full from Go would still need a metric-collection pass equivalent to the Rust `auditPhase0..auditPhase7` chain. That's a separate port, deliberately not in this wave. - The `git_commit` field carries Rust git history (commits like `ca7375ea` from the Rust legacy repo). A Go-side audit-full would stamp `golangLAKEHOUSE` SHAs. The two are separate lineages — the file format is shared, but the git-commit references trace back to whichever repo emitted the entry.