Skip to content

WIP: version 670#28898

Open
chrisnojima wants to merge 76 commits intomasterfrom
nojima/HOTPOT-next-670-clean
Open

WIP: version 670#28898
chrisnojima wants to merge 76 commits intomasterfrom
nojima/HOTPOT-next-670-clean

Conversation

@chrisnojima
Copy link
Contributor

No description provided.

@chrisnojima chrisnojima mentioned this pull request Feb 13, 2026
# Conflicts:
#	shared/constants/init/index.native.tsx
#	shared/constants/platform-specific/index.desktop.tsx
#	shared/constants/router2/index.tsx
#	shared/stores/archive.tsx
#	shared/stores/config.tsx
* move from box to box2
* try automated perf harness
* rename numbered things back to root
* fix device timeline
* modernize jsi (#28941)
* native level cleanup (#28942)
* encode msgpack on cpp side. rpc on just handle arrays.
chrisnojima and others added 30 commits March 3, 2026 11:50
* typo (#28965)

* deduplicate silent notifications

* lock

* switch accounts on push

---------

Co-authored-by: chrisnojima <cnojima@keyba.se>
* merge chat input down into one file
* small jsi improvements

* handle common types first
* Migrate inbox native list from FlatList to LegendList with recycling

* Tune LegendList: drawDistance=250 for best scroll FPS
* unify inbox with legend list

* unify more
* kb.list to legends

* merge desktop and native

* lint
* Add teams list perf testing with Maestro flow and React Profiler wraps
* adopt rn ref api to cleanup
* Fix orange line race condition on desktop

Two issues fixed:
1. On desktop, the NormalWrapper component doesn't remount when switching
   conversations (ChatProvider just changes id prop). The initial load
   useEffect had empty deps [], so loadOrangeLine never fired for
   subsequent conversation switches. Changed to depend on [id, loaded].

2. The getUnreadline RPC raced with markThreadAsRead - both fire to the
   Go service, and if mark-read was processed first, the service returned
   no unread line. Fixed by snapshotting meta.readMsgID during render
   (before any effects) and passing it to the RPC. Also wait for loaded
   state so the Go service has messages in its local cache.

* Fix teams divider badge to only count hidden small team unread

The divider was showing smallTeamBadgeCount which includes all small
teams. Now subtracts badge counts from visible small team rows so the
badge only reflects unread messages in hidden/collapsed conversations.

* Fix lint: use useMemo instead of ref writes during render

Replace ref-during-render pattern with useMemo to snapshot readMsgID
when conversation id changes, satisfying react-hooks/refs lint rule.
trim → .trim(), isArray → Array.isArray, includes → .includes(),
assign → Object.assign, clamp → Math.min/max, range → Array.from,
uniq → [...new Set()]
Guard DOM element behind isMobile check so it only renders on desktop.
* Add onClick/style/children to Avatar2, migrate ~60 Avatar usages

Enhance Avatar2 with onClick (including 'profile'), style, and children
props. Migrate all Avatar consumers that don't use rare props (editable,
imageOverrideUrl, lighterPlaceholders, showFollowingStatus, crop, blocked)
to Avatar2.

Convert borderColor prop to boxShadow style inline (with borderRadius),
drop skipBackground/loadingColor (Avatar2 doesn't need them).

Remaining ~10 Avatar usages with rare props will be migrated in a
follow-up PR.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Migrate remaining Avatar usages to Avatar2, delete old Avatar

- Add imageOverrideUrl, crop, and placeholder-on-error to Avatar2
- Migrate all remaining ~10 Avatar consumers to Avatar2
- Handle editable/showFollowingStatus as Avatar2 children
- Drop lighterPlaceholders (use standard placeholder)
- Delete old Avatar component (hooks, index, CSS)
- Remove dead Avatar import from rich-button
- Add start-hot-debug script to help debug Electron

* Rename Avatar2 to Avatar, move into common-adapters/avatar/

Pure rename: Avatar2 → Avatar across ~75 files. Move implementation
from avatar2.{d.ts,desktop.tsx,native.tsx,css} into avatar/ directory.

* Switch desktop avatar from <img> to background-image to eliminate scroll flicker

<img> tags require async decode on mount even from cache, causing a visible
background flash when virtualized list rows remount during scrolling.
CSS background-image paints synchronously from memory cache.

Also add recyclingKey + cachePolicy to native expo-image for better scroll perf.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants