Compute Dated Standing and Cache Lists
Context
Staff need dated coverage answers while lists need efficient filtering across many members. The cache therefore serves a different purpose from the rights resolver.
Decision
Terms, applicable grace and suspension determine standing; term writes and scheduled sweeps refresh the separate list cache.
Alternatives Considered
Store status as the truth and change it by events: Event-only status can become stale after missed work and cannot reconstruct arbitrary business dates reliably.
Compute on every read and store nothing: Uncached filtering would repeat period resolution across every candidate record.
Consequences
A stale cache does not change the dated rights calculation. Stored-status filters can lag; today-status filtering explicitly recomputes standing. Missing sweep history triggers a full refresh rather than replay of every elapsed boundary.