Body and query transforms.
Pure transforms with no network or placement lookup: scalar extraction from
a document body, document-_id construction, and tenancy-field
inject/strip. Held to the highest coverage bar including branch coverage
(docs/09).
This crate deliberately depends only on [osproxy_core] and serde_json:
it speaks in primitives (paths, names, JSON values), and the tenancy adapter
(osproxy-tenancy) translates SPI rule types into these calls. That keeps
the transforms a small, exhaustively testable leaf of the dependency graph.
M2 adds query-DSL filter wrapping ([wrap_query], docs/04 §4) and the
logical↔physical id mapping for by-id reads. Bulk NDJSON demux (docs/04
§3) lands in M3 alongside its endpoint.