Guide
Offline Grace
What offline grace is, when it begins, which failures may use it, and which hard-denial states must lock immediately.
Offline grace is not a catch-all
Offline grace is not a catch-all for every validation failure. It only preserves access after a prior valid activation or validation when the current failure is temporary transport failure and the stored grace deadline has not expired.
SoundSync
Grace decision table
Use server-issued grace_expires_at/graceExpiresAt and prior validation state. Do not reset grace by restarting the plugin.
| Condition | Permit grace? | Access behavior | Required client action |
|---|---|---|---|
| Network timeout after prior valid cache | Yes, until graceExpiresAt | Keep access only if cache schema, product, app, environment, and machine match. | Retry validation later and do not extend grace locally. |
| DNS/TLS/transport failure after prior valid cache | Yes, until graceExpiresAt | Keep access only inside the existing grace window. | Record sanitized diagnostic and retry online validation. |
| Fresh install with no activation cache | No | Keep locked. | Show activation screen. |
| Corrupt cache or missing required fields | No | Keep locked. | Discard unsafe state and require activation. |
| SERIAL_NOT_FOUND or SERIAL_REVOKED | No | Lock immediately. | Clear/replace local state according to support policy. |
| device_deactivated | No | Lock immediately. | Delete activation cache. |
| subscription_payment_required | No | Lock immediately. | Route customer to billing/support. |
| Revoked plugin credential | No | Lock or block integration. | Regenerate credentials/package. |
| System clock rollback suspected | Implementation-defined | Do not extend grace from local clock movement. | Prefer server timestamps and require online validation if uncertain. |
Length and source
Perpetual licenses default to 30 days and subscriptions to 7 days unless product/env configuration overrides within verified caps. The plugin should store the server-returned grace expiration rather than locally inventing a new one.
