ff5aab0df0
Brings the 2.6 line onto 3.0: pnpm workspace + packages/ui + packages/locales, route-level code splitting, the i18n namespace split (api_errors.gen.json / shared.gen.json), and the lint/typecheck quality gates that 3.0 never had. Conflict calls worth recording: - Permission dialogs and PermissionListTab: took 3.0. F048 replaced the hand-rolled dialogs with the unified <PermissionDialog> (-240 lines each); 2.6's side was a 3-line cosmetic change on the pre-F048 version. - appChat/index.tsx: took 3.0 — 2.6's checkPermission is checkResourceAction on this line. - MessageFile / MessageBsChoose: took 3.0 — AppChatFileChip already branches on images, and 2.6's ChatFile no longer exists here. - routes: took 2.6's lazy() architecture and pulled 3.0's MediaPlaybackPage into it, since a lazy route without Suspense would have thrown. - knowledgeUploadCapabilities: 3.0's shape (media is a runtime flag now) with 2.6's webLink rollout. - vite.config: took 3.0 — 2.6's side had a hardcoded 192.168.106.105 left over from WeCom debugging. - translation.json ×3: three-way key merge. 2.6's ~100 "deletions" are the namespace split, not drops; no merged source still references them. The one key that would have been lost, api_errors.10027, was re-added to the packages/locales SSOT and regenerated. Quality gates, now that they apply to 3.0 code for the first time: real defects fixed (missing ServiceBusyNotice import, isParsingMedia read off a union that lacks it, an IntentNode with no step, a stale getItemPermissions argument, a dead ChatErrorCard import); style-level legacy violations frozen the way the project already does it. @types/testing-library__jest-dom@5 added because jest-dom 5.17 ships no types of its own. Backend: zero regression against the pre-merge baseline (157 failed both sides, 3708 -> 3753 passed). One test needed adapting: 2.6's _RecordingSession recorded a single statement, 3.0's records a list.