Ask of every cached answer: who else gets exactly the same one? Data that is the same for a
whole organization, or for one organization and role, belongs in a named
scope such as ORGANIZATION, backed by a
[[cache.policy.vary]] entry. It stores one entry per group and keeps your hit rate, where a
per-person entry misses for every member. For a plain HTTP origin, a vary
rule on the organization claim partitions the whole service
the same way. Data that is the same for everyone stays PUBLIC, which is also the default:
@cacheControl(scope:) is PUBLIC unless you write a scope, even for a request with a
credential, so give every type or field whose answer depends on the caller a scope (a field
hint without one keeps its type’s scope).
Only what really differs per person gets scope: PRIVATE (or Cache-Control: private from your
origin), the last rung, which relies on the expression in the next card. See who shares an
entry.