ISpooferMotion v2.5.9
v2.5.9
Makes community asset-cache contributions reliable.
Fixed
- Community-cache writes no longer fail silently. The app now checks the API response and reports writes that the server rejects instead of discarding every result.
- Temporary API failures are retried. Timeouts, rate limits, and server errors receive up to three attempts with bounded backoff; permanent client errors fail immediately.
- Completed jobs now wait for cache contributions to finish. Writes run with limited concurrency instead of being launched as untracked background tasks that could be lost when the process exits.
- Legacy cache migrations are only marked complete after every entry is accepted. An incomplete migration remains eligible for another attempt on the next startup.
- Telemetry opt-out now takes effect immediately. Disabling telemetry no longer depends on the config server responding, stale config requests cannot re-enable contributions, and queued cache retries stop when contributions are disabled.
- Telemetry heartbeat now respects the telemetry setting. Turning telemetry off stops the heartbeat and clears its timer instead of continuing to send it in the background.
- Maintenance mode now clears after service recovery. A later healthy config response resets the banner instead of leaving the application stuck in maintenance mode.
- Community-cache endpoint validation is stricter. Plain HTTP remains available for local development, but only exact loopback hosts qualify; lookalike hostnames such as
localhost.example.comare rejected.
Internal
- Added local HTTP-server tests covering the POST payload, transient retries, and permanent-error handling.
- Duplicate asset discoveries within a job are collapsed to one contribution before upload, and endpoint refreshes no longer erase the useful in-memory session cache.
- Updated stale frontend fixtures for timestamped spoofing logs and the account switcher so the full test suite covers the current UI again.
- The community cache remains write-only. Asset resolution reads only the app's in-memory session cache and never fetches mappings from the remote API.