Appearance
App #854 targets staging and closes #284 on merge. The issue remains open while the PR is pending; this supersedes the earlier audit's implementation gaps once merged, not its historical delivery record.
Scanner quota feedback renders the narrowed server label and valid counters, with an explicit View offers action. Malformed 402 bodies receive safe generic quota copy; raw HTML/errors and undefined counters are never displayed. Session, HTTP 429, network and server failures retain their existing treatment.
Collection synchronization preserves a distinct plan-limit outcome. The backup hook and outcome description no longer mislabel it as a connection failure. After email sign-in and before share publication, the user chooses Continue or View offers. The existing login remains valid, local holdings are not discarded, the success timestamp is not updated after refusal, and publication stops rather than copying or sharing a nonexistent link. No automatic retry or quota bypass.
Validation: 3,012 Jest tests passed, 11 skipped; lint, TypeScript and diff checks passed. Regressions cover actual mocked transport 402 responses, safe malformed handling, typed sync outcomes, retained local rows/timestamps and user-triggered offers navigation. The Maestro scenario assumes a refusal prepared using a dedicated test account/transport and was not run. The user approved retaining all tests/docs beyond the ten-file limit.
Delivery: PR only, not merged or deployed at this entry. No real user account, holdings, scan quota, backend configuration or VPS data was changed. No emulator was launched. Partial server-side sync progress before a later refusal is not rolled back or falsely described as a complete backup.