- Shipped
- September 3, 2026 at 4:48 PM UTC
- Author
- Kamo
- Commit
- d42e6ac
A record that is both an organisation and a person is now labelled "Harmony Home Loans (Nickolas McGarry)" everywhere one string has to stand for it. Company only when there is no contact, contact only when there is no company. When somebody thinks about a customer they are working, they think of the organisation — the contact is who you actually ring, which makes it the qualifier, not the headline. The estate held all three wrong answers at once, and each looked reasonable where it sat: - DROPPED THE COMPANY — the /leads Communication View chip, the lead detail page title, the softphone (so a call from a company's line was announced under whichever individual was on the record), the leads-needing-action list, the calendar's call panel, the lead history panel, the linked-account row, the account page title and breadcrumb, the account assign picker, the esign account picker, the subscription and signups pickers. - DROPPED THE CONTACT — the /leads grid's own Contact column, which showed the company and threw the person away, making the grid the only screen where you could not see who to ask for. - LED WITH THE CONTACT — the account assign picker's list and its confirm bar, which disagreed with each other on top of that: the list bolded the contact with the company bracketed after, the confirm bar did the reverse. So the same customer had a different name depending on which screen you found them on, which is what makes a list hard to search and a call hard to place. One rule, one function: app/lib/entityLabel.ts, with the two-empty, one-empty, both-set, padded and same-name-in-both-fields cases pinned by tests. Grids that already carry a separate Company column keep the person in their Name column and compose only where a single label stands alone — the POS customers table is the example, where its delete confirmation now names the company but its rows do not, because the row has a column for it. Also fixes the account's Leads tab, which rendered a column of "---" and linked every row to /leads/view/undefined: the endpoint was sending nothing but the uid under a key the table did not read.