Decide which firm domain is canonical — accounts exist on hoganlovells.com while the live domain is hlc.com, and three products key off the pair #159
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Surfaced 2026-07-27 while checking whether a user (Cedric Rohr) had a Paliad account. He does —
cedric.rohr@hoganlovells.com, created 2026-04-26. That resolved his question, but it exposed a risk nobody owns.The problem
Since the merger the firm is Hogan Lovells Cadwalader and
hoganlovells.com301-redirects tohlc.com(verified directly — fetchinghttps://www.hoganlovells.com/de/legal-notices/disclaimerlands onwww.hlc.com/...).Paliad's
ALLOWED_EMAIL_DOMAINSallowlists both forms (hoganlovells.com,hlc.com,hlc.de). So a colleague can sign up under either, and paliad has no merge story for the two identities. Concretely:@hoganlovells.comaccount who later signs up as@hlc.comgets a second, empty account — same human, no projects, no deadlines, no team memberships. From their side the product simply looks broken.hlc.com, while thehoganlovells.comform is the stale one. So both directions are live.Today there is exactly one user per human and no duplicates (checked). This is a latent problem, not a current outage — but it becomes real the first time someone signs up with the other form.
Why this is not a paliad-local decision
The same domain pair is load-bearing in at least three products:
ALLOWED_EMAIL_DOMAINSgate, 51 users today, all onhoganlovells.com.hlc.comandhoganlovells.com, reusing the youpc accounts.If each product decides independently which form is canonical, they drift apart, and a user's identity depends on which product they signed into first. That is a worse failure than any single product getting it wrong consistently.
What needs deciding
hlc.com(the live domain) orhoganlovells.com(where the existing accounts are)? These pull in opposite directions: the live domain is the future, the existing accounts are the present.Suggested shape, not a decision
Accepting both at the gate but normalising to one canonical form at account creation would stop new duplicates without locking anyone out mid-transition, and is reversible. That is a guess, not a recommendation — the cross-product owner should decide before anyone builds.
Not urgent
No current duplicate accounts. Filing it because it is exactly the class of finding that dissolves when a chat scrolls, and it bites silently — the symptom is a colleague seeing an empty product and concluding the tool does not work, not an error anyone gets paged about.
Filed by paliad/head at otto/head's request. Cross-references: otto message 5652; m/hihlc#11, m/hihlc#7.
Three of the four items are done. The fourth is the cross-product one and I cannot answer it from paliad.
What I ran — read-only queries against prod, plus the auth and
internal/emaildomaincode paths. Going through the issue's own list rather than assuming m's ruling settled all of it.1. Which form is canonical — DONE
m ruled 2026-07-27:
hlc.comcanonical,hoganlovells.comalias,hlc.dedropped.internal/emaildomaincarries the split.2. What happens to accounts on the non-canonical form — DONE, and the migration has already run
The issue records "51 users today, all on
hoganlovells.com". That is no longer the state. On prod now:hlc.comhoganlovells.comAnd the reconciliation is clean:
paliad.usersonhoganlovells.com: 0; onhlc.com: 47paliad.users↔auth.usersemail mirror drift: 0The accounts were renamed rather than duplicated, and
cmd/canonicalize-emailsis the machinery that did it. The concrete risk the issue was filed about — "a second, empty account… same human, no projects" — has zero instances.Sign-in still accepts the alias and says so rather than failing:
handleAPILoginreturns anoticetelling the user their address moved to@hlc.comand that the old one keeps working.3. Whether signup should refuse the non-canonical form — DONE
This is the item that would have let the problem regrow, so it is worth spelling out. There are two gates, deliberately different:
isAllowedEmailDomain— sign-IN, still acceptshoganlovells.com, so no existing holder is locked out.isCreatableEmailDomain— every path that mints a new identity (register, both admin-create paths, invitation recipients). It filtersAllowedEmailDomains()throughemaildomain.IsAlias(), so only the canonical form can create.A new
@hoganlovells.comsignup is refused with a message that names what to do instead: "Neue Zugänge nur mit @hlc.com-Adresse. Wenn Sie bereits ein Konto haben, melden Sie sich mit Ihrer bisherigen Adresse an — die funktioniert unverändert weiter."That is the "accept both at the gate, normalise at creation" shape this issue suggested, implemented.
4. Who owns the decision across the three products — STILL OPEN, and I cannot answer it here
This is the part the issue itself says "makes it an issue rather than a paliad ticket". paliad is settled; m/hihlc and youpc are not something I can measure from this repo, and guessing at their state is exactly what would make this comment worse than silence. Someone with those two repos has to say whether they canonicalised the same way, and whether anyone owns the pair going forward.
One side effect worth naming
Dropping
hlc.debites on sign-IN, not just registration, so its holders are locked out at their next login. There is exactly 1@hlc.deaccount on prod — a dormanttester@global_admin. m's own account is not affected. Noting it so it is a known consequence rather than a surprise.Verdict: partially resolved. Items 1-3 done and measured; item 4 open and cross-product. Not closing — that is m's.