171 lines
11 KiB
Markdown
171 lines
11 KiB
Markdown
## User
|
|
- **User:** Howard Enos (howard)
|
|
- **Machine:** Howard-Home
|
|
- **Role:** tech
|
|
|
|
## Session Summary
|
|
|
|
A prior session working Cascades of Tucson was lost mid-task (Howard accidentally cleared the
|
|
working context). This session reconstructed what that lost session had done, confirmed an
|
|
outstanding message to Mike had NOT been sent, sent it, then verified the underlying work
|
|
end-to-end against live systems.
|
|
|
|
The lost session had offboarded **Alma Montt** (terminated; Memory Care Life Enrichment /
|
|
MC Reception; no PHI/clinical access). Recovery was possible because the work product survived
|
|
in two places even though no session log had been checkpointed: the offboarding record
|
|
`clients/cascades-tucson/docs/security/offboarding-2026-06-25-alma-montt.md` and the uncommitted
|
|
datto-edr skill changes in the working tree (unrelated to Alma). The coord message log (last 30)
|
|
confirmed nothing about "tenant control / remove access" had gone out.
|
|
|
|
The one item the lost session had flagged for Mike was a tenant-security decision: resetting
|
|
Alma's M365 password required JIT-elevating the `ComputerGuru - Tenant Admin` service principal
|
|
to **Privileged Authentication Administrator (PAA)**, and Microsoft Graph blocked the automatic
|
|
teardown ("removing self from built-in role is not allowed"). That SP is therefore still holding
|
|
a standing PAA role on the Cascades tenant. Because tenant role/access posture is Mike's call
|
|
(admin/owner, Global Admin), a coord message was sent to Mike (his most-active session today,
|
|
GURU-5070/claude-main) laying out the issue, the exact removal steps, and a recommended posture
|
|
(keep JIT, fix the teardown so it stops stranding the role).
|
|
|
|
Finally, the Alma offboarding was verified live rather than trusted from the doc. M365 state was
|
|
read via the remediation-tool skill (investigator Graph token + investigator-exo Exchange token),
|
|
and on-prem AD state via the rmm skill against CS-SERVER. All eight claimed actions confirmed
|
|
true against live state. The only loose end is the leftover PAA role assignment, now in Mike's
|
|
queue.
|
|
|
|
## Key Decisions
|
|
|
|
- **Did not guess the message content for Mike.** Reconstructed it from the surviving offboarding
|
|
doc rather than fabricating; the "remove some access" item is specifically the leftover PAA role
|
|
on the Tenant Admin SP.
|
|
- **Sent the coord message to Mike's most-active session (GURU-5070)** rather than broadcasting,
|
|
since it is a decision specifically for Mike. Coord messages persist/queue if he is on another box.
|
|
- **Verified offboarding live with least-privilege tokens** (investigator + investigator-exo for
|
|
read; read-only Get-ADUser on CS-SERVER) rather than relying on the doc's self-reported results.
|
|
- **Recommended keeping JIT elevation (no standing PAA)** for the Tenant Admin SP and fixing the
|
|
teardown, vs. granting permanent PAA — least-privilege for an auth-admin role.
|
|
|
|
## Problems Encountered
|
|
|
|
- **Lost session context** — Howard cleared the working context accidentally. Resolved by grepping
|
|
surviving artifacts (offboarding doc, uncommitted working-tree changes) + the coord message log
|
|
to reconstruct state; confirmed the Mike message was never sent.
|
|
- **Bash `$UID` collision** — first Graph query used a variable named `UID`, which is a readonly
|
|
bash builtin (expanded to the OS uid 197609), so the query hit the wrong resource
|
|
(`Request_ResourceNotFound: '197609'`). Resolved by renaming the variable to `AID`.
|
|
- **EXO MailboxPermission AccessRights parse** — initial parse pulled the wrong key and showed
|
|
`AccessRights: None`; re-queried the raw permission object to confirm Shelby.Trozzi holds
|
|
`FullAccess` (not inherited, not deny).
|
|
|
|
## Configuration Changes
|
|
|
|
- **Created:** `clients/cascades-tucson/session-logs/2026-06/2026-06-25-howard-alma-offboarding-recovery-verify.md` (this log)
|
|
- No code or config changes made this session (verification was read-only).
|
|
- Note: uncommitted **datto-edr skill** changes remain in the working tree from the lost session
|
|
(`.claude/skills/datto-edr/scripts/edr.py`, `edr_client.py`, new `selftest.py`) — Locations vs
|
|
scan-Targets inventory-model refactor. Unrelated to Alma; left as-is for a separate review/commit.
|
|
|
|
## Credentials & Secrets
|
|
|
|
- Alma Montt offboarding password stored for emergency recovery/audit only at vault
|
|
`clients/cascades-tucson/alma-montt` (do NOT re-enable without authorization). No new credentials
|
|
created or discovered this session.
|
|
|
|
## Infrastructure & Servers
|
|
|
|
- **M365 tenant:** cascadestucson.com — Tenant ID `207fa277-e9d8-4eb7-ada1-1064d2221498`
|
|
- **Alma Montt M365 object id:** `b2fb546e-687a-4647-b286-9c8edd3d989f`
|
|
- **On-prem DC:** CS-SERVER (192.168.2.254), `cascades.local`; GuruRMM agent id (live this session)
|
|
`c39f1de7-d5b6-45ae-b132-e06977ab1713` (re-enrolls — resolve live by hostname).
|
|
- **Remediation apps used:** ComputerGuru Security Investigator (`bfbc12a4-f0dd-4e12-b06d-997e7271e10c`,
|
|
Graph read + EXO read). The PAA-stranded SP is **ComputerGuru - Tenant Admin**.
|
|
- **Coord API:** http://172.16.3.30:8001/api/coord — message sent to GURU-5070/claude-main.
|
|
|
|
## Commands & Outputs
|
|
|
|
- Graph user verify (Security Investigator token):
|
|
`GET /v1.0/users/{id}?$select=accountEnabled,assignedLicenses,showInAddressList` ->
|
|
`accountEnabled=false`, `assignedLicenses=[]`, `showInAddressList=false`; `memberOf` -> none.
|
|
- EXO mailbox verify (Security Investigator EXO token):
|
|
`GET adminapi/beta/{tenant}/Mailbox('Alma.Montt@cascadestucson.com')` ->
|
|
`RecipientTypeDetails=SharedMailbox`; `.../MailboxPermission` -> `Shelby.Trozzi -> [FullAccess]`
|
|
(IsInherited=false, Deny=false).
|
|
- AD verify (RMM, CS-SERVER, exit 0):
|
|
`Get-ADUser Alma.Montt -Properties Enabled,MemberOf,DistinguishedName` ->
|
|
`Enabled=False`, `DN=CN=Alma Montt,OU=Excluded-From-Sync,DC=cascades,DC=local`, `GroupCount=0`.
|
|
- Coord message POST -> id `4b2bb6a9-881b-4003-984c-687183b96802` (to GURU-5070/claude-main).
|
|
|
|
## Pending / Incomplete Tasks
|
|
|
|
- **[MIKE / SECURITY] Remove the standing Privileged Authentication Administrator role from the
|
|
`ComputerGuru - Tenant Admin` SP** on the Cascades tenant (Entra portal: Roles & admins ->
|
|
Privileged Authentication Administrator -> remove the SP). LEAVE its Conditional Access
|
|
Administrator role (intentional). Either Mike does it, or grants Howard GA briefly. Message sent.
|
|
- **[POSTURE] Decide the JIT-elevation pattern** so password resets via the Tenant Admin SP stop
|
|
stranding PAA (self-removal is blocked by Graph). Recommended: keep JIT, fix teardown.
|
|
- **[SEPARATE] datto-edr skill changes** uncommitted in the working tree — review + commit/discard
|
|
on their own.
|
|
- Reconcile: Alma removed from proposed share rosters
|
|
(`docs/migration/share-group-roster-proposed-2026-06-25.md`).
|
|
|
|
## Reference Information
|
|
|
|
- Offboarding record: `clients/cascades-tucson/docs/security/offboarding-2026-06-25-alma-montt.md`
|
|
- Termination runbook: `docs/security/termination-procedures.md`
|
|
- Coord message id: `4b2bb6a9-881b-4003-984c-687183b96802`
|
|
- Cascades wiki: `wiki/clients/cascades-tucson.md`
|
|
|
|
## Update: 12:53 PT — Reconciled Alma out of all active plans
|
|
|
|
Following the verified offboarding, reconciled Alma Montt out of every forward-looking Cascades
|
|
doc so no future session/tech treats her as a current or to-be-created user. The 2026-06-25
|
|
proposed share roster was already done (struck + OFFBOARDED) by the lost session. Edited the
|
|
remaining active docs, each annotated with `OFFBOARDED 2026-06-25` + a pointer to the offboarding
|
|
record (strikethrough preserves the decision history rather than deleting it):
|
|
|
|
- `docs/servers/active-directory.md` — current-state AD reference: changelog entry, Enabled-Accounts
|
|
table row, OU tree (Administrative), MCReception printer access, and Pending-Issues row all updated
|
|
to reflect disabled + moved to OU=Excluded-From-Sync.
|
|
- `docs/printers.md` — MCReception printer user list (removed Alma; note to reassign replacement).
|
|
- `docs/cloud/user-account-rollout-plan.md` — added a [RECONCILE] banner; fixed persona count 18->17,
|
|
SG-External-Signin-Allowed seed line, the per-person resolution row, the Wave-1 create list, and the
|
|
decision summary.
|
|
- `docs/cloud/p2-staff-candidates.md` — license-math count 18->17; candidate roster row.
|
|
- `PLAN-AND-QUESTIONS-2026-04-24.md` — Track C / C1 Phase 2 sync list.
|
|
- `docs/migration/share-access-matrix-2026-04-23.md` — Alma section + LifeEnrichment share RW list.
|
|
- `docs/migration/scripts/phase2-print-server.ps1` — MCReception comment + printer Comment field.
|
|
|
|
Left as historical record (dated point-in-time artifacts, intentionally NOT rewritten): the April
|
|
questionnaires/working-lists/followups, `reports/cascades-staff-2026-04-22.csv`, the Canva and
|
|
orphan-deletes reports, the 2026-04-22 HIPAA review, `scripts/create-alma-montt-2026-05-18.ps1`,
|
|
`scripts/build-open-questions-docx.py`, and `PLAN-AND-QUESTIONS-2026-04-23-archived.md`.
|
|
|
|
Ticked the offboarding record follow-up checkbox (reconciliation complete). Remaining open item is
|
|
unchanged: Mike to remove the stranded Privileged Authentication Administrator role on the Tenant
|
|
Admin SP.
|
|
|
|
## Update: 15:21 PT — Compiled the Cascades wiki (full recompile)
|
|
|
|
Ran `/wiki-compile client:cascades-tucson --full`. Pulled live Syncro data (customer 20149445):
|
|
hours 48.25 -> 47.75 as of 2026-06-25; 29 assets; open work tickets dropped from 6 to 5 (#32230
|
|
Karen->ALDOCS now Resolved); 4 hardware items Invoiced (#32440 server SSDs, #32439 MemCare UPS,
|
|
#32443 Front Desk battery, #32330 Chris Knight PC). New source material folded in: the two
|
|
2026-06-25 logs (this one + synology-skill-verify) and two 2026-06-24 plans (CARF technology,
|
|
CSC-ENT/voice/Helpany consolidation) + the offboarding record.
|
|
|
|
Process note: first delegated the synthesis to a Sonnet subagent, which hit the 32000-output-token
|
|
ceiling trying to regenerate all 634 lines and wrote nothing. Switched to staging a copy of the live
|
|
article and applying TARGETED edits for just the deltas (same serialized+staged workflow: per-article
|
|
coord lock 59885881..., staged file, diff reviewed, applied, lock released, staging cleared). This
|
|
preserved the existing synthesis exactly instead of risking a lossy full regen.
|
|
|
|
Changes landed in the article (620 -> 634 lines, additive): Profile Syncro refresh; Alma offboarding
|
|
in Access + Email&Identity (SPB seat freed) + History; the stranded Tenant Admin PAA role as an open
|
|
security item in Access + Active Work; CARF Technology & System Plan deliverable in Active Work +
|
|
History; CSC-ENT device-island consolidation in History. wiki/index.md row + compile date bumped to
|
|
2026-06-25. Committed + pushed (wiki: compile cascades-tucson (full)).
|
|
|
|
FRICTION (worth a rule): a Sonnet wiki-compile subagent asked to emit a full ~600-line article via
|
|
the Write tool blows the 32k output-token cap. For large existing articles, do TARGETED staged edits
|
|
of the deltas, not a full regen — or have the subagent Edit a staged copy rather than Write the whole
|
|
file.
|