- Fix WeChat QR polling stuck in "waiting for scan" caused by React 18
StrictMode double-mount leaving cancelledRef as true; reset refs at
flow start and inline polling loop to avoid stale closure issues
- Increase iLink API poll timeouts (37s context, 40s HTTP client) and
Vite proxy timeout (45s) to match long-poll behavior
- Add debug logging to WeChat QR begin/poll handlers for troubleshooting
- Fix restart API returning 400 on empty body; make JSON body optional
- Add restart button to platform setup completion screen with i18n
- Add TOML config formatter: insert blank lines between sections, strip
zero-value keys and empty sections for cleaner config output
Made-with: Cursor