Reduce every Product in a get_products response to the canonical-only
shape — format_options[] present, format_ids[] dropped. Returns
{ response, diagnostics } so callers surface projection diagnostics
alongside the response's existing errors[].
Response-level counterpart to toCanonicalOnlyProduct; same
fail-closed guarantee, aggregated across products. A wholly unmappable
legacy product cannot be represented as a canonical Product because the
protocol requires format_options to contain at least one declaration. It
is therefore omitted from the canonical list and surfaced through the
response's portable errors[] plus the SDK convenience diagnostics. A
partially mappable product remains with its mapped options and advisories
for the refs that could not be projected.
Reduce every Product in a
get_productsresponse to the canonical-only shape —format_options[]present,format_ids[]dropped. Returns{ response, diagnostics }so callers surface projection diagnostics alongside the response's existingerrors[].Response-level counterpart to toCanonicalOnlyProduct; same fail-closed guarantee, aggregated across products. A wholly unmappable legacy product cannot be represented as a canonical Product because the protocol requires
format_optionsto contain at least one declaration. It is therefore omitted from the canonical list and surfaced through the response's portableerrors[]plus the SDK convenience diagnostics. A partially mappable product remains with its mapped options and advisories for the refs that could not be projected.