Each RosterPerson carries an aliases array alongside its best id today. The canonical id MOVES — the day a framer gets a login, the merge promotes his Clerk id over the crew row's — so anything resolving a stored id must look at the aliases too.
Also called: hours went missing · id changed when he got a login · old link stopped working
- 1add() accepts an alsoKnownAs id (typically the crew_members row id when the row also has a user_id) and re-keys the merged record under every alias.
- 2rosterPerson() matches on id OR any alias.
- 3The crew portal deliberately keeps the id the LINK carries rather than the roster's current best, because existing hours rows are keyed to it.
- 4The team labour rollup, person dossier, payout and stale-shift sweep all fold ids through the alias map before totalling.
A person's identity in the system changes the day they gain an office account, and everything issued before that still carries the old one — a field link texted last month, a month of logged hours, a signed acceptance. Every person keeps a record of every identity they have been seen under, so anything holding an older one still resolves to the right man. Without it, links stopped working for exactly the people who had just been promoted, and hours logged before someone gained a login would quietly disappear from their year.
- Identity migrations orphaning historical records.
- Links breaking when a person's canonical id changes.
- Under-reported hours and earnings for long-serving staff.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →