Repository navigation
ogar-dir-sim: Mail is a label that hydrates the Exchange identity (recipient types + ExchangeGuid + PrimarySmtpAddress) - #332
Conversation
`mail` is a display label Exchange does not reserve; only proxyAddresses, the UPN and a remote mailbox's routing address make an address belong to an object. lance-graph's validator stopped emitting the Mail role (lance-graph #1433), so the variant has no producer left. Deprecate it rather than remove it so existing matches keep compiling, and correct the AddressConflict doc that still described a `mail` value as a claim. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg
|
Warning Review limit reachedYour organization has reached its usage spending cap. Adjust your spending cap in the billing tab. Next included review available in 31 minutes. View limit details
Warning Billing warning: we have not been able to collect payment for this subscription for more than 72 hours. Please update the payment method or pay any pending invoices in Billing to avoid service interruption. Comment |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
…entity Deprecating AddressRole::Mail treated "no longer a claim" as "carries no information". It is still information: a `mail` label names an address, and the useful question is which object holds that address and what Exchange knows it as. - AddressRole::Mail is the label role again, not deprecated. It is still never a holder in AddressConflict. - exchange::ExchangeIdentity: what Exchange knows an object as, read by GUID: the recipient types, the mailbox's ExchangeGuid, and its PrimarySmtpAddress. - exchange::MailLabel: where a label resolves. Own (the object holds the address itself), Elsewhere (another object holds it; that holder's identity), Contested (several holders; none hydrated), Unheld (stale). - ogar-ad schema v6: msExchMailboxGuid as a 128-bit id in guid slot 2 (mixed-endian, like objectGUID), with exchange_guid() for the outbound bytes. Exchange Online keeps the same value as the mailbox's ExchangeGuid across a move. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg
MailLabel (from #332) modelled mail as a trigger that resolves to the address holder's ExchangeIdentity. It does not: mail is a label any account may carry, it resolves to nothing, and identity is read by GUID only — the object, then the mailbox's ExchangeGuid once provisioned, and ExternalDirectoryObjectId across the hybrid join. ExchangeIdentity stays (read by GUID); MailLabel and its export are removed, and the AddressRole::Mail doc says so. No consumer used MailLabel (lance-graph #1444 drops its use in the same step). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg
What
The first commit deprecated
AddressRole::Mail. The second commit replaces that with a repurpose; the net diff againstmainis what's described below.crates/ogar-dir-simAddressRole::Mailis not deprecated. It stays the label role and is still never a holder inViolation::AddressConflict. Its doc comment now says what a label is for.exchange::ExchangeIdentity: what Exchange knows an object as, read by its GUID:node: the object'sobjectGUID;recipient: its recipient types;exchange_guid: its mailbox'sExchangeGuid;primary_smtp: itsPrimarySmtpAddress.exchange::MailLabel: where amaillabel resolves.Own: the object holds the address itself.Elsewhere { key, holder }: another object holds it; the result carries that holder's identity.Contested { key, holders }: several objects hold it; none is hydrated.Unheld { key }: nobody holds it, so the label is stale.AddressConflictdoc fix from the first commit stays.crates/ogar-ad, schema v6msExchMailboxGuidis stored as a 128-bit id in guid slot 2. It decodes as mixed-endian bytes, likeobjectGUID, and is never stored as text.exchange_guid(rec)returns AD's 16 bytes for the outbound side.SCHEMA_VERSIONis now 6; the attribute table stays append-only.Why
Deprecation treated "
mailis no longer a claim" as "mailcarries no information". Amaillabel still names an address, and the useful question is which object holds that address and what Exchange knows that object as. The label is the trigger for one lookup. Identity stays on GUIDs: the object'sobjectGUID, and the mailbox'sExchangeGuid, which Exchange Online keeps across a move. The address is a value of the identity, never the key it is looked up by.Merge order
Merge this first, then the lance-graph PR that consumes it. That PR reads the schema-6 slot and the new types; its Identity CI checks out OGAR
main, so it stays red until this is merged. lance-graphmaindoes not use these new items, so merging this alone breaks nothing.Verified (Rust 1.99.0)
clippy --workspace --all-targets -D warningsis clean;test --workspacehas 1048 passing and 0 failing;fmt --all --checkis clean.the_exchange_guid_is_an_id_not_a_string:objectGUID;exchange_guid()returns the same bytes;msExchMailboxGuiddecode arm removed, that test fails; restored, it passes.🤖 Generated with Claude Code
https://claude.ai/code/session_01G22yT6htkcdyXsihxxXdrg