RefreshTokenFamilyRotation composition: builds a fresh
RefreshTokenFamily aggregate on register, and translates
RefreshTokenFamilyStore.updateFamily outcomes into the 4-variant
RefreshTokenFamilyRotationOutcome on rotate.
The closure-captured abortReason is reset at the top of every updater
invocation so CAS retries observe the freshest classification (the LAST
updater invocation determines the abort reason).
Defence-in-depth fallback ?? "replayed" on the aborted branch: if a
future code path adds an abort case that forgets to set abortReason,
the safest classification is "replayed" (caller rejects either way;
defaulting to a reject-class outcome is fail-closed).
RefreshTokenFamilyRotation composition: builds a fresh RefreshTokenFamily aggregate on
register, and translates RefreshTokenFamilyStore.updateFamily outcomes into the 4-variant RefreshTokenFamilyRotationOutcome onrotate.The closure-captured
abortReasonis reset at the top of every updater invocation so CAS retries observe the freshest classification (the LAST updater invocation determines the abort reason).Defence-in-depth fallback
?? "replayed"on the aborted branch: if a future code path adds an abort case that forgets to setabortReason, the safest classification is "replayed" (caller rejects either way; defaulting to a reject-class outcome is fail-closed).Per A3 §6.1.