sync: auto-sync from GURU-5070 at 2026-06-02 07:33:26
Author: Mike Swanson Machine: GURU-5070 Timestamp: 2026-06-02 07:33:26
This commit is contained in:
158
clients/rednour/session-logs/2026-06-02-session.md
Normal file
158
clients/rednour/session-logs/2026-06-02-session.md
Normal file
@@ -0,0 +1,158 @@
|
||||
## User
|
||||
- **User:** Mike Swanson (mike)
|
||||
- **Machine:** GURU-5070
|
||||
- **Role:** admin
|
||||
|
||||
## Session Summary
|
||||
|
||||
Resolved a follow-up to last week's Rednour Law mailbox rename (Emma -> Carla). Carrie Rednour
|
||||
(tenant Global Admin) texted Mike that inbound mail from Carla still displayed under the old name
|
||||
"Emma - Rednour Law" and asked if it could be fixed. Mike pulled up the issue and Claude
|
||||
investigated via the remediation tool against the rednourlaw.com tenant
|
||||
(`4a4ca18a-f516-478b-99da-2e0722c5dc18`).
|
||||
|
||||
First verified the server side was actually correct: Carla's Azure AD `displayName` (Graph) and
|
||||
her Exchange mailbox `DisplayName` (Get-Mailbox via Exchange REST) were both "Carla Skinner". An
|
||||
initial wrong hypothesis — that "Emma - Rednour Law" was never a server value because the other
|
||||
mailboxes follow a "First Last" naming convention — was corrected by Mike and confirmed against
|
||||
the 2026-05-31 audit report, which showed the mailbox's pre-rename `displayName` had in fact been
|
||||
literally "Emma - Rednour Law". That reframed the problem as a stale client-side artifact on
|
||||
Carrie's end.
|
||||
|
||||
Graph apps in the suite have no `Contacts.Read` permission (confirmed 403 on a Graph contacts
|
||||
call, and no Contacts/Mail roles in the user-manager or tenant-admin tokens), so Claude read
|
||||
Carrie's contacts over EWS using the Exchange Operator SP's `full_access_as_app` role with
|
||||
`ExchangeImpersonation` of crednour@rednourlaw.com. Her default Contacts folder (237 items) had no
|
||||
Emma/Carla entry, but a deep sweep of all contact folders found the culprit in her Quick Contacts
|
||||
folder (`IPF.Contact.MOC.QuickContacts`): a pinned contact "Emma - Rednour Law" mapped to
|
||||
emma@rednourlaw.com. Because emma@ is still a live proxy alias on Carla's mailbox (deliberately
|
||||
retained last session), Outlook resolved Carla's new mail to that old pin and rendered its name.
|
||||
With Mike's go-ahead (he chose "delete the pin"), the contact was removed via EWS DeleteItem
|
||||
(MoveToDeletedItems, recoverable) and the removal verified.
|
||||
|
||||
Mike then asked to check the other mailboxes. The same EWS contact-folder sweep ran against Nick
|
||||
Pafford, the receptionist mailbox, and Carla's own mailbox — all clean, no stale Emma/Carla
|
||||
entries. The issue was isolated entirely to Carrie. Closed out by writing a follow-up report to
|
||||
`clients/rednour/reports/`, posting an internal (hidden) documentation comment to Syncro #32343,
|
||||
and posting the mandatory #bot-alerts notification. No time was billed (Mike did not specify
|
||||
minutes/labor type).
|
||||
|
||||
## Key Decisions
|
||||
|
||||
- **Delete the pin rather than rename it or hand it to Carrie.** Mike chose deletion via EWS;
|
||||
Carla's mail now falls back to the GAL ("Carla Skinner"). Carrie can re-pin from the GAL if she
|
||||
wants the favorite back.
|
||||
- **Used EWS, not Graph, to read/modify Carrie's contacts.** No app in the suite holds
|
||||
`Contacts.Read`/`ReadWrite` on Graph; the Exchange apps' `full_access_as_app` reaches personal
|
||||
contact folders via EWS impersonation. Per skill scope rules, did not attempt to add a Graph
|
||||
scope to work around it.
|
||||
- **Left the emma@ alias in place.** It's the enabling factor for the shadowing, but mail to
|
||||
emma@ still reaches Carla and it was retained by design last session. Removing it would break
|
||||
delivery to emma@ and only mask the contact issue rather than fix it.
|
||||
- **No time billed on the follow-up.** Mike's standing rule: never assume minutes/labor type.
|
||||
Added a documentation comment only; flagged that time can be added to #32343 on request.
|
||||
- **Internal/hidden Syncro comment, not customer-visible.** Mike is communicating with Carrie
|
||||
directly over text; the ticket note is for the technical record.
|
||||
|
||||
## Problems Encountered
|
||||
|
||||
- **Wrong initial assertion that "Emma - Rednour Law" was never a server value.** Based on the
|
||||
other mailboxes' "First Last" convention. Mike corrected it; confirmed against the 2026-05-31
|
||||
audit report that the pre-rename displayName was exactly that string. Lesson: check the prior
|
||||
session's recorded before-state, don't infer from sibling-object conventions.
|
||||
- **Security Investigator EXO token 401'd** on the InvokeCommand read even though the token had
|
||||
`aud=outlook.office365.com` and `full_access_as_app`. Switched to the Exchange Operator SP
|
||||
token (proven on this tenant last session), which returned HTTP 200.
|
||||
- **py wrote itemid file to the wrong /tmp.** `open('/tmp/emma-itemid.txt')` in Windows Python
|
||||
resolves to `C:\tmp`, not the msys `/tmp` that bash reads — so the delete step initially got an
|
||||
empty ItemId. Fixed by piping the ItemId/ChangeKey through stdout (`read IID CK < <(py -c ...)`)
|
||||
and copying EWS responses to a repo-relative file both interpreters agree on before parsing.
|
||||
- **EWS "Id is malformed"** when a folder's GUID-style DisplayName was passed as a FolderId.
|
||||
Several MOC contact folders have no friendly name (DisplayName is a GUID); used the real
|
||||
base64 EWS FolderId from FindFolder instead.
|
||||
|
||||
## Configuration Changes
|
||||
|
||||
**ClaudeTools repo (committed this session):**
|
||||
- `clients/rednour/reports/2026-06-02-carrie-emma-display-name-stale-pin.md` — new follow-up
|
||||
report documenting diagnosis, fix, and the all-mailbox sweep.
|
||||
- `clients/rednour/session-logs/2026-06-02-session.md` — this log.
|
||||
- `wiki/clients/rednour.md` + `wiki/index.md` — seeded/updated in Phase 3 (if synthesis ran).
|
||||
|
||||
**rednourlaw.com tenant (mailbox data):**
|
||||
- Deleted the "Emma - Rednour Law" -> emma@rednourlaw.com contact from Carrie Rednour's
|
||||
(crednour@) Quick Contacts folder (`IPF.Contact.MOC.QuickContacts`) via EWS DeleteItem
|
||||
(MoveToDeletedItems — recoverable from her Deleted Items).
|
||||
|
||||
**Syncro:**
|
||||
- Internal/hidden comment `416427937` on ticket #32343 (id 111409967). No line item, no invoice.
|
||||
|
||||
## Credentials & Secrets
|
||||
|
||||
No new credentials created or discovered this session. Tokens used were app-only client-credentials
|
||||
flows for the existing ComputerGuru MSP SPs (cached under `/tmp/remediation-tool/<tenant>/`):
|
||||
- Exchange Operator SP `b43e7342-5b4b-492f-890f-bb5a4f7f40e9` (`full_access_as_app`, aud
|
||||
`https://outlook.office365.com`) — used for EWS reads + the contact delete.
|
||||
- Security Investigator SP `bfbc12a4-f0dd-4e12-b06d-997e7271e10c` — Graph read (displayName);
|
||||
its EXO token 401'd for InvokeCommand.
|
||||
|
||||
## Infrastructure & Servers
|
||||
|
||||
- **Tenant:** rednourlaw.com = `4a4ca18a-f516-478b-99da-2e0722c5dc18`
|
||||
- **EWS endpoint:** `https://outlook.office365.com/EWS/Exchange.asmx` (SOAP; `ExchangeImpersonation`
|
||||
via `<t:ConnectingSID><t:SmtpAddress>` header)
|
||||
- **Exchange REST InvokeCommand:** `https://outlook.office365.com/adminapi/beta/<tenant>/InvokeCommand`
|
||||
- **Mailboxes (5 recipients):** carla@ (Carla Skinner, was Emma; obj `93074d1a-6db2-4794-8f7d-c84a619e4494`),
|
||||
crednour@ (Carrie Rednour, Global Admin, obj `a0fc8517-1c2a-4d72-b774-c0d5c929167a`),
|
||||
npafford@ (Nick Pafford, alias nick@), receptionist@, + system DiscoverySearchMailbox.
|
||||
- **Carla proxyAddresses:** SMTP:carla@, smtp:emma@, smtp:dgarcia@, smtp:alee@,
|
||||
smtp:dgarcia@rednourlaw.onmicrosoft.com.
|
||||
|
||||
## Commands & Outputs
|
||||
|
||||
```bash
|
||||
# Tokens
|
||||
bash .claude/skills/remediation-tool/scripts/get-token.sh <tenant> investigator # Graph read
|
||||
bash .claude/skills/remediation-tool/scripts/get-token.sh <tenant> exchange-op # EXO/EWS (worked)
|
||||
|
||||
# Graph: Carla displayName -> "Carla Skinner"
|
||||
curl -H "Authorization: Bearer $GTOK" \
|
||||
"https://graph.microsoft.com/v1.0/users/93074d1a-...?$select=displayName,proxyAddresses"
|
||||
|
||||
# Exchange: Get-Mailbox carla -> DisplayName "Carla Skinner" (HTTP 200 with exchange-op token;
|
||||
# investigator-exo token 401'd)
|
||||
POST .../adminapi/beta/<tenant>/InvokeCommand {"CmdletInput":{"CmdletName":"Get-Mailbox",...}}
|
||||
|
||||
# EWS: enumerate contact folders (FindFolder Deep, msgfolderroot) then FindItem per folder.
|
||||
# Hit: folder IPF.Contact.MOC.QuickContacts -> contact "Emma - Rednour Law" / emma@rednourlaw.com
|
||||
# EWS DeleteItem DeleteType="MoveToDeletedItems" -> ResponseClass="Success" / NoError
|
||||
# Verify: folder TotalItemsInView 2 -> 1; "Emma - Rednour Law" no longer present
|
||||
|
||||
# Sweep other boxes (npafford@, receptionist@, carla@): contact folders enumerated, 0 matches
|
||||
# Counts: Carrie 237 contacts / Nick 0 / receptionist 34 / Carla 40
|
||||
|
||||
# Syncro internal comment
|
||||
POST /tickets/111409967/comment (hidden:true, do_not_email:true) -> comment.id 416427937
|
||||
bash .claude/scripts/post-bot-alert.sh "[SYNCRO] Mike commented #32343 ..." # message_id 1511375413711212665
|
||||
```
|
||||
|
||||
## Pending / Incomplete Tasks
|
||||
|
||||
- **Billing on #32343:** no time logged for this follow-up. Add minutes + labor type if Mike wants
|
||||
it billed. The earlier 0.5h remote line from 2026-05-31 still sits on the (Resolved) ticket
|
||||
pending final close-out.
|
||||
- **Shared-drive access for Nick Pafford** (#32343) — still deferred from the 2026-05-31 session.
|
||||
- **emma@ alias** remains on Carla's mailbox by design; revisit only if the firm wants emma@
|
||||
decommissioned.
|
||||
- If Carrie still sees the old name after sync, a one-time Outlook restart (cached mode) forces
|
||||
the contact change down.
|
||||
|
||||
## Reference Information
|
||||
|
||||
- **Syncro:** Customer Rednour Law id `1224246`; Ticket #32343 id `111409967` (Resolved);
|
||||
comment `416427937`. URL: https://computerguru.syncromsp.com/tickets/111409967
|
||||
- **Report:** `clients/rednour/reports/2026-06-02-carrie-emma-display-name-stale-pin.md`
|
||||
- **Prior session:** `session-logs/2026-05-31-mike-rednour-and-claudetools-infra.md` and
|
||||
`clients/rednour/reports/2026-05-31-onboard-and-rename-emma-to-carla.md`
|
||||
- **Stale-pin folder class:** `IPF.Contact.MOC.QuickContacts` (Outlook/Skype pinned favorites) —
|
||||
resolves sender display names ahead of the GAL.
|
||||
Reference in New Issue
Block a user