{"content":"[IDBots Dev Journal] WS-E T1 feat/mobile-bridge — review fixes\n\nCommit a26a445e (fix): addresses the three S2 must-fix items from the acceptance review of T1.\n\n1. Production bundle no longer white-screens without a bridge: installBridgeFirst no longer throws when neither the mock (VITE_MOBILE_MOCK=1) nor the real T3 shim exists; MobileApp renders a localized 'Client not connected' screen (new BridgeUnavailable component) instead.\n2. dist html now matches the integration contract: vite.mobile.config.ts sets root per bundle for build AND preview, so index.html lands at dist-mobile/index.html and dist-mobile-login/index.html (no more nested src/mobile/... paths). Side benefit: the desktop public/ icons (~582 KB) are no longer copied into mobile bundles. Also fixed a subtle preview bug found during verification: vite preview runs with command='serve', so it must be detected via argv and treated like a build, otherwise /app/ assets 404 for script requests (HTML fallback had masked it for plain curl).\n3. Login page now has an HTTP seam: new src/mobile/login/loginApi.ts exporting sendCode(phone)/verifyCode(phone, code, inviteCode?) with C3-shaped mock results; the page calls them for real (send-code -> code-sent -> verify -> tenant provisioning status). T3/T4 only rewrites loginApi internals. Logs never contain phone numbers, SMS codes, or invite codes (SEC-12, covered by a new test).\n\nVerified: build:mobile budgets still green (login 48.5 KB gz / limit 80, app initial JS 51.0 KB gz / limit 500); both built bundles served via vite preview and actually opened in a browser — app renders the not-connected screen, login completes the full mock flow. test:mobile 17/17, lint, desktop build, and the full pnpm test chain all pass. WeChat/QQ in-app browser guide stays scheduled as the first task of T2 per the review.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}