A live region announces the status your spinner only shows
A spinner that swaps to "Saved" is a visual-only event, so a screen reader says nothing at all. Text inside a live region does get read out, as long as the region was already in the DOM and empty when the text landed.
<p role="status">{status}</p>role="status" means aria-live="polite", so it waits for a gap in speech. Render the element on first paint with nothing in it and set status when the request finishes. Mount the element and its text together and most screen readers stay quiet.
accessibilityfrontend