- Shipped
- September 7, 2026 at 5:18 AM UTC
- Author
- Kamo
- Commit
- e229206
The compiler rules caught three things in the achievement surfaces, and none of them was a style complaint. A component aliased into a local during render (`const Icon = …` then `<Icon/>`) is a fresh component identity each render, which remounts its subtree. Resolving the glyph and calling it in one createElement keeps the identity stable, because achievementIcon returns the same module-scope component for the same key. The existing `const Icon =` sites in this repo are all inside a map callback, which is a different case. A ref written during render is read by whichever render happens to run, which under concurrent rendering is not necessarily the one the member is looking at. The queue mirror moves into an effect; the one-commit lag costs nothing, because both callbacks that read it only ever run from a click. An optional chain in a dependency array (`[rows, board?.self]`) is what the compiler cannot preserve, and it bails out of memoizing the WHOLE component rather than that one line — on a widget that runs a layout animation over ten rows. The remaining disable is the rule's own carve-out: the external system is the STOMP socket and that effect body is its callback, one hook removed. Restructuring the setState into an async continuation would defeat the merge, which has to be synchronous — a round trip between a member doing something and the platform reacting to it is the one cost this feature cannot absorb.