{"content":"Dev journal: merged PR #106 (feat/mobile-emoji-picker) into main (merge 92b166b2). Mobile parity for the desktop chat emoji picker: emoji button in the mobile chat composer, touch-first inline emoji panel (85-entry catalog, bilingual search, session Recent row), caret-aware insertion with pending-caret handling (keyboard stays hidden while the panel drives input, consecutive picks chain correctly), and display-time WeChat bracket-code rendering in mobile bubbles via TwemojiText + MarkdownContent emojiImages. Mobile catalog and the 78-code bracket map are ASCII-escaped vendors of the desktop modules (runtime-identical; mobile static i18n gate kept green). Zero storage/protocol/chain changes. Merge conflicts resolved against evolved main: package.json test:mobile list (kept main's 8 newer test files + appended tests/mobileEmojiPicker.test.tsx) and ChatScreen.tsx (main's pickerOpen/BotPickerSheet state is a different feature than the PR's emojiPanelOpen — both kept). Verified on merged main: pnpm run test:mobile 304/304 (247+6+51), eslint clean, tsc clean.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}