release: v1.4.0 — Telegram launch diagnostic + dynamic SDK load #127
Reference in New Issue
Block a user
Delete Branch "development"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Promote
development→masterfor the v1.4.0 release.Highlights
/telegram/without sign-in data (emptyinitData) no longer bounces the visitor to the marketing landing. Instead a compact, one-screenshot, privacy-safe diagnostic (screens/TelegramLaunchError.svelte) — SDK load outcome, platform/version,initDatastate,tgWebAppData-in-URL, field names present/missing, OS/mobile/browser, UA — no secrets, noinitDatavalues, no IP — with Share (OS share sheet / clipboard) and Retry.telegram-web-app.jsis loaded dynamically with a 10s timeout (pinned?62), only on a Telegram entry — a network that blockstelegram.org(common where Telegram reaches users over a proxy) no longer hangs the page, and/app// native no longer touchtelegram.orgat all.sdk-loadoutcome (present/loaded/no-webapp/error/timeout) pinpoints a blocked or hangingtelegram.org— the prime suspect for the Android "won't open" reports.Why
Android users were bounced to the landing with no signal, and a blocked
telegram.orghung the page. This makes the failure diagnosable on the device: once live, a stuck user taps Share;sdk-load: error|timeoutconfirms atelegram.orgblock (next step would be self-hosting the SDK so blocked users get a working app).Carries #126. Tests: 326 unit + full e2e green; CI green on
development(#535). Docs:ARCHITECTURE.md,UI_DESIGN.md.A Mini App launch on /telegram/ without sign-in data (empty initData) used to location.replace('/') — bouncing the visitor to the marketing landing. That destroyed all diagnosability and, on some Android clients that reach the entry with no initData, simply looked like the app refusing to open. Replace the bounce with a compact, privacy-safe launch-error screen (screens/TelegramLaunchError.svelte) that renders a one-screenshot diagnostic snapshot captured at the moment of failure: SDK/WebApp presence, Telegram platform/version, whether initData is empty, whether the URL fragment carried tgWebAppData, the initData field NAMES present/missing (never the signed values, never an IP), and OS/mobile/browser via User-Agent Client Hints plus the full User-Agent. A Share button delivers it through the OS share sheet (clipboard copy on desktop, reusing the GCG no-webview-strand guard); Retry re-checks in place to recover a late initData without a reload (which would discard the launch fragment). This is the instrument to root-cause the Android empty-initData failure, which is not reproducible in Playwright. Tests: collectTelegramDiag + shareText/pickTextShare unit tests; the /telegram/ e2e now asserts the diagnostic screen, not a redirect. Docs: ARCHITECTURE.md + UI_DESIGN.md updated.