- Ya
- 29 Agosti 2026, 05:58 UTC
- Mwandishi
- Kamo
- Ahadi ya
- bba51ec
A member is named by the organization's own word for one — "Harmony - Borrower Portal" for a lender that calls them Borrowers. A team member is named by their DEPARTMENT — "Del Taco - Sales Portal" — which is the more specific fact and the one they identify with. Most team members have no department, so that falls back to the organization's team-member label rather than to a blank: the shape of the title stays the same for everyone, and an org that renamed the concept still sees its own vocabulary. Composed in ONE function. This surface has broken repeatedly from several writers each owning a fragment and whichever landed last winning, so composeTabTitle is what the loader, the sign-in seed, the pre-paint script (through THEME_TITLE_KEY) and the attention flasher all end up using. There is no second copy of the format. Painted before first frame, not after a round trip. The composed title goes into THEME_TITLE_KEY, which the script in the document head already applies before React exists, so every load after a tab's first is instant. The first entry is covered by seeding it during /validate — inside the pause that already precedes the redirect, so it costs no added latency — and it is best-effort, because the app composes the same title on arrival regardless. The stored title stays a MIRROR and never becomes the source of truth: every authoritative load recomposes and overwrites it. An update made in another tab, or by an administrator, therefore corrects itself within one load. That distinction is the difference between this and the two stale-cache faults fixed earlier today. The loader reads the session from userInfoStore directly rather than through useUserInfo, which also needs OrgContext — and this component is rendered above the providers. Until the session resolves the organization's name stands alone: an incomplete title is correct, where a guessed role would not be.