Batched fix release (#36, 22 commits). Gate: clean-room adversarial review, two rounds — round 1 found two blockers the 800+-test suite missed; both fixed and re-verified.
Fix: HTTP backend integrity — HttpLedgerBackend.list_snapshots rode GET /changelog's 7-day default window, silently truncating history for any client older than a week; now queries all-time explicitly. A fresh-client name-mapping cache bug fixed on the same path. Server side: /record rejects empty model names with 422 instead of auto-registering a phantom "" model.
Fix: /query platform filter — the platform parameter was accepted and silently ignored, returning the full inventory; it now filters (present since 0.7.12).
Fix: trace depth — trace reported depth as list arithmetic over the result set rather than graph distance, inflating chains (a 43-deep display artifact in one live case); depth is now true BFS distance.
Fix: SQL lineage extraction — bare (schema-unqualified) identifiers now resolve as read tables, and WITH-clause CTE names are subtracted so dbt-style base/final CTEs no longer appear as phantom upstream tables (nested, RECURSIVE, and shadowing cases tested). This was the round-1 adversarial blocker: the bare-identifier fix alone would have polluted lineage.
Fix: model-name whitespace — names are stripped on registration; untrimmed twins of the same model can no longer be minted.
Fix: XGBoost introspector dispatch — sklearn-wrapped XGBoost estimators dispatch to the correct introspector.
Also: docs/packaging cleanups. 840 tests. Recommended for all deployments; strictly a fix release (no API surface changes — three breaking-leaning items were deferred to keep PATCH semver).