Repository navigation
Device test: device ID, theme and more diagnostics, with how to fix what fails #2054
Description
Problem
The "Test my device" mode (#2047) checks what a form needs, but not what support is asked about most:
- Device limit. A visitor says "it says I already submitted from this device", or the limit does not hold on one phone. Nothing shows whether the browser gives the fingerprint signals, nor whether they stay the same between two reads. A signal that changes on every read breaks the "N of M" match.
- Theme. A visitor reports odd colours. Nothing shows whether the dark theme is applied, nor what the site setting and the system preference are.
- Common silent causes. A wrong device clock breaks date windows and the captcha's expiry. Blocked storage (a private window) makes "already submitted" and "Continue anyway" forget. A browser without Web Crypto or Workers cannot solve the ALTCHA captcha. Data saver can stop scripts loading.
- No way forward. A failing row says what is wrong, not what to do about it. A check that hangs leaves the row with no answer.
Plan
-
Device ID. It reads the same signals the forms send (
ffc-device-signals.js, thumbmark), through a read-only collector that never creates the persistent id, twice. It shows:- a short code (8 hex characters from the signal hashes);
- how many of the site's signals were read;
- whether they stayed the same, naming the ones that changed.
Its states include "not used on this site" and "not available in this browser".
-
Theme: the theme applied, the site setting and the system preference.
-
Local storage: a probe key written and removed at once.
-
Captcha: Web Crypto and Web Workers.
-
Device clock: compared with the
Dateheader of a HEAD request for the page itself; no endpoint. -
Time zone and language: the IANA zone, the UTC offset and the language.
-
Screen: window, screen and zoom.
-
Connection: online or offline, the type and data saver, where the browser says them.
-
"How to fix it". A failing row carries an information button that reveals the fix; for a blocked location the fix depends on the platform.
-
Countdown. A check still running counts down from 20 seconds and says when no answer came.
-
Nothing is sent or stored.
Acceptance criteria
- The device ID row shows the code, the count and stability, names the changing signals, and never creates
ffc_device_id. - Device ID off and unavailable states.
- The theme row for each setting × system preference.
- Storage, captcha, clock (correct, ahead, behind, unknown), locale, screen and connection (type, data saver, offline) rows.
- The information button and its fix on warn/fail only; platform-aware location fix.
- Countdown and timeout.
- Tests for each case.
Activity
[-]Device test: show the device id the device limit reads, and the theme in use[/-][+]Device test: device ID, theme and more diagnostics, with how to fix what fails[/+]feat(frontend): the device test diagnoses more and says how to fix wh…
rpgmem commentedon Oct 24, 2026
Delivered in #2055 (merged to
develop). New device-test rows:Each failing row has a "How to fix it" info button with platform-specific steps. A row that is still running counts down from 20 seconds and then asks for a reload.
Generated by Claude Code