CoreKeyResolver
Builds a stable cache key from QueryMetadata.
Resolution order for each {placeholder} in QueryMetadata.template:
QueryMetadata.bindings — populated from
@Path/@Queryby the transport adapter.QueryMetadata.bodyBytes — JSON body searched for a matching primitive field via Utf8JsonLookup.
Unresolved → returns
null. Caller skips the cache action safely.
Output shape: scopeName|<resolvedTemplate>|<fingerprint-hash> where fingerprint is a deterministic 64-bit FNV-style hash of the sorted key=value bindings, hex-encoded.
Functions
Resolves metadata into a cache key, or null if any placeholder cannot be filled from QueryMetadata.bindings or QueryMetadata.bodyBytes.
Resolves QueryMetadata.tagTemplates against the same bindings / body sources used by resolve. Templates that cannot be fully resolved are dropped silently.