diff --git a/clients/attrebesch/session-logs/2026-06-01-session.md b/clients/attrebesch/session-logs/2026-06-01-session.md index 177415a..7babd8c 100644 --- a/clients/attrebesch/session-logs/2026-06-01-session.md +++ b/clients/attrebesch/session-logs/2026-06-01-session.md @@ -182,3 +182,62 @@ Final converged result: 6118 raw -> 674 unique contacts, 0 invalid emails, 0 sam - Local data + scripts: C:\claudetools\.claude\tmp\treb-data\, .claude/tmp/treb-merge.ps1 / treb-enhance.ps1 / treb-extract.ps1 - Pipeline: extract (Outlook COM, user_session) -> merge (union-find identity) -> enhance (notes->fields) -> verify + +--- + +## Update: 22:46 MST — import troubleshooting, address fixes, Outlook template, folder cleanup + +### Session Summary + +Howard imported the deliverable into Outlook and round-tripped (export) repeatedly; each export showed problems. Diagnosed and fixed three distinct Outlook-import issues across iterations, all locally on Howard-Home (data moved off DESKTOP-QNP3ON5). + +First round-trip showed duplicates and a phone/address drop (206 phones -> 50). Determined the loss happened in Outlook's import (not the dedup): the file I had given carried a UTF-8 BOM that corrupted the first header, used a trimmed 45-col set, and had invalid 0/0/00 dates, so Outlook's auto-map skipped fields. Merged my enriched FINAL with the round-trip export (union-find, FINAL-priority) into a clean superset, then rebuilt that into Outlook's EXACT official 92-column template (read live from Howard's sample file), UTF-8 NO BOM, blank invalid dates -> Contacts-outlook.csv (666). Confirmed header byte-for-byte matches the template. + +Fixed all street addresses: the notes-address parser had left a stray leading number + embedded newlines (e.g. "4961\n\n1218 Saxonhill Drive"). Wrote treb-fixaddr.ps1 (take the real street line, drop lone-number artifacts, scrub newlines) and added 4 targeted corrections recovered from each contact's own Notes (MexGrocer, Montana ANG, Bohman, McNeill). Result: all 66 addresses clean, components in correct columns. + +Next import still showed emails blank + a "folder with random letters/numbers." Live COM probe revealed: emails were blank because Outlook's CSV import had dropped them (old file format); the "random folders" are Outlook's hidden GUID system folders (GAL/recipient cache) - harmless. After delivering the template-format file (no BOM), a fresh export proved emails NOW import (621 populated). Remaining duplicates were caused by importing into a folder that still held prior contacts (929 = 666 + leftovers). Emptied the default Contacts folder via COM (929 -> 0), pushed the clean file to the Owner Desktop as default.csv (gzip+base64 in 3 chunks via RMM; byte-identical, no BOM, 666 rows, 622 emails). + +Howard then reported two Tim Gleason contacts. Confirmed all my files contain exactly ONE merged Gleason; live COM probe showed the default Contacts now has 664 (clean import succeeded, one Gleason), and the extra Gleasons live in OTHER PSTs still mounted in his Outlook (Outlook1.pst x3, Outlook.pst x3, Suggested Contacts x2). Root cause of the perceived duplicates = multiple source PSTs still mounted, whose Contacts folders the address book aggregates. Offered to unmount the 4 leftover source PSTs + clear Suggested Contacts via RMM. AWAITING Howard's go. + +### Key Decisions + +- Build the deliverable in Outlook's exact 92-col template, UTF-8 no BOM, blank 0/0/00 dates - the BOM/format was the real import-failure cause, not the data. +- Merge my enriched FINAL with the round-trip export (FINAL-priority gap-fill) so Outlook's lossy round-trip didn't degrade the data; union-find dedup over the union. +- Did NOT auto-merge by shared phone - fuzzy scan showed shared phones are mostly couples/colleagues/the ACG office number (304-8300), not same-person. +- Empty the target Contacts folder before import (via COM) - the recurring duplicates were import-into-non-empty-folder, not a dedup miss. +- Transferred the file to the Owner box via gzip+base64 RMM chunks (308KB -> 63KB b64 -> 3 chunks) rather than asking Howard to move another file. +- The perceived Gleason duplicate is an Outlook display artifact (multiple mounted PSTs aggregated in the address book), not a data duplicate - fix is unmounting leftover PSTs, not more deduping. + +### Problems Encountered + +- Phone/address/email loss on import: Outlook auto-map skipped fields due to BOM-corrupted header + non-template columns + invalid dates. Fixed by exact-template + no-BOM rebuild; verified emails import (621) afterward. +- Address fields garbled (stray leading number + newlines): treb-fixaddr.ps1 cleans street lines; 4 unrecoverable-by-regex ones corrected from notes. +- Recurring duplicates on every import: importing into a non-empty folder. Emptied folder via COM (929->0). +- PowerShell case-insensitive variable collision ($OUT path vs $out results) broke Export-Csv; renamed to $OUTFILE. +- LoadCsv returned an array-wrapped-array (`,$rows`) -> only 2 mega-records; removed the unary comma. +- "Two Gleasons": not in any data file; caused by leftover mounted source PSTs (Outlook1/Outlook) + Suggested Contacts being aggregated by the address book. + +### Configuration Changes (this update) + +- Created .claude/tmp/treb-dedup.ps1 (dedup the round-trip export; later combined FINAL + round-trip). +- Created .claude/tmp/treb-fixaddr.ps1 (street cleaning + 4 targeted address corrections). +- Created .claude/tmp/treb-template.ps1 (rebuild into Outlook's exact 92-col template, no BOM). +- Local outputs in .claude/tmp/treb-data/: Contacts-clean.csv, Contacts-final.csv, Contacts-outlook.csv (final 666, template format), default.gz.b64. +- On DESKTOP-QNP3ON5: C:\Users\Owner\Desktop\default.csv (clean 666, pushed via RMM). Default Contacts folder emptied (929->0) then re-imported by Howard (664). + +### Deliverable (current) + +- Authoritative clean file: C:\claudetools\.claude\tmp\treb-data\Contacts-outlook.csv = C:\Users\Owner\Desktop\default.csv on the Owner box. 666 contacts, 92-col Outlook template, no BOM, 622 emails, 200 phones, 65 addresses (all clean), 267 notes, 0 dup-email, 0 dup-name. + +### Pending / Incomplete (this update) + +- AWAITING Howard go: unmount 4 leftover source PSTs (Outlook1.pst, Outlook.pst, archive1.pst, backup.pst) from his Outlook profile + clear Suggested Contacts (639) via RMM, leaving only the clean 664-contact treb737@earthlink.net Contacts as the address book. PST files on disk untouched. +- A few genuine cross-email same-person pairs remain unmerged (Ron Snyder, Judy Stout/U OF A JUDY, Irene/Reenie Keating same reenandcoach local-part, Philomina Bime) - ambiguous, deferred (could add same-email-local-part merge signal if wanted). +- Syncro #31953 time/resolution note still to log. + +### Reference (this update) + +- Owner box file: C:\Users\Owner\Desktop\default.csv +- Local: C:\claudetools\.claude\tmp\treb-data\Contacts-outlook.csv + treb-dedup/fixaddr/template.ps1 +- Outlook template source: C:\Users\Howard\Downloads\Sample CSV file for importing contacts.csv (92 cols) +- Agent ba173f0c-19e8-488d-834c-1b6f6dfd5699; default Contacts = store treb737@earthlink.net diff --git a/wiki/clients/attrebesch.md b/wiki/clients/attrebesch.md index 500aba7..41a3b80 100644 --- a/wiki/clients/attrebesch.md +++ b/wiki/clients/attrebesch.md @@ -12,7 +12,7 @@ backlinks: # AT Trebesch -Residential client in Tucson, AZ. Single workstation. Syncro customer 238740. Onboarded into GuruRMM 2026-06-01. Primary active work: PST contact consolidation (Syncro #31953). +Residential client in Tucson, AZ. Single workstation. Syncro customer 238740. Onboarded into GuruRMM 2026-06-01. Primary active work: PST contact consolidation (Syncro #31953) — final CSV delivered and imported; pending source-PST unmount to clear address-book aggregation duplicates. --- @@ -24,7 +24,7 @@ Residential client in Tucson, AZ. Single workstation. Syncro customer 238740. On - **Key contact:** treb737@earthlink.net | 520-529-4999 - **Address:** 7280 N. Cathedral Rock, Tucson AZ - **Syncro customer ID:** `238740` -- **Open tickets:** #31953 (address book / contact recovery), #32160 (assess for threats) +- **Open tickets:** #31953 (address book / contact recovery — import done, PST unmount pending), #32160 (assess for threats) --- @@ -81,6 +81,11 @@ Residential client in Tucson, AZ. Single workstation. Syncro customer 238740. On - **Heavy PST duplication.** 24 PST files total but only 16 are unique (byte-identical copies across Desktop\Outlook\backup\ and D:\E\). Deduplicate by name+size before mounting to avoid redundant AddStore work. - **Large unmounted PSTs take ~9s per AddStore** (Outlook reads only the store index). Two 48 GB Outlook2.pst files each took ~9s and turned out to contain real address books (793 and 725 contacts). Do not skip large archives without probing — they may hold contact data. - **Run COM scripts in `user_session` context.** Outlook COM requires the Owner session; SYSTEM context fails. GuruRMM command context must be `user_session` for treb-extract.ps1. +- **Outlook CSV import: write NO BOM.** Outlook's CSV importer auto-maps by field name; a UTF-8 BOM corrupts the first column header and causes Outlook to silently skip that field (emails and phones come in blank). Always write CSV files with UTF-8 encoding and no BOM for Outlook import. +- **Outlook CSV import: use the exact official 92-column template.** Use Outlook's "Sample CSV file for importing contacts.csv" headers verbatim. Non-template or reordered headers cause Outlook to silently drop those fields. +- **Outlook CSV import: leave Birthday/Anniversary blank.** Invalid dates (e.g., 0/0/00 from contacts with no date set) are rejected on import. Leave date fields empty rather than passing a zero date. +- **Outlook import ADDS to a folder — never replaces.** Importing into a folder that already contains contacts produces duplicates. Always empty the target Contacts folder (via COM or manually) before importing a fresh file. +- **Mounted source PSTs aggregate in the Outlook address book.** The Outlook address book displays contacts from ALL mounted PST stores plus Suggested Contacts, so leftover source PSTs appear as duplicates even when the target Contacts folder is clean. After a contact-import migration, unmount all source PSTs and clear Suggested Contacts to eliminate the aggregation effect. --- @@ -88,7 +93,7 @@ Residential client in Tucson, AZ. Single workstation. Syncro customer 238740. On | Ticket | Summary | Status | |---|---|---| -| #31953 | Address book / contact recovery — consolidate 24 PSTs into one Outlook-importable CSV | Delivery pending (CSV on Howard-Home; needs transfer to DESKTOP-QNP3ON5 for import) | +| #31953 | Address book / contact recovery — 666-contact CSV imported into Outlook; PENDING: unmount 4 source PSTs + clear Suggested Contacts | In progress — final step pending | | #32160 | Assess for threats — pairs with /rmm diagnose once agent reporting confirmed | Open | ### PST Contact Recovery (Syncro #31953) @@ -96,23 +101,23 @@ Residential client in Tucson, AZ. Single workstation. Syncro customer 238740. On **Goal:** Extract all address-book contacts from the client's 24 PSTs and consolidate into one Outlook-importable CSV. **Pipeline:** -1. `treb-extract.ps1` — Phase 1: Outlook COM in `user_session`; mounts each unique PST via AddStore, reads real address-book folders (excludes Suggested Contacts / Recipient Cache), captures raw JSON per PST. MaxMB cap skips large unmounted stores (mounted stores always read); $MaxMB=0 overrides. -2. `treb-merge.ps1` — Phase 2: runs as SYSTEM; union-find identity model (EmailsOf + BestName functions; dedup signals: real email, clean First+Last, FullName/FileAs/Subject, email-derived name); reconstructs real emails from all four email fields + email-split-across-name-fields; keys on real-email-or-name, never on junk Email1Address. -3. `treb-enhance.ps1` — Phase 3: non-destructive; parses phones, street addresses (high-confidence pattern), and emails from Notes into structured Outlook columns; Notes left verbatim. +1. `treb-extract.ps1` — Phase 1: Outlook COM in `user_session`; mounts each unique PST via AddStore, reads real address-book folders (excludes Suggested Contacts / Recipient Cache), captures raw JSON per PST with FullName/FileAs/Subject fields. MaxMB cap skips large unmounted stores (mounted stores always read); $MaxMB=0 overrides. +2. `treb-merge.ps1` — Phase 2: runs as SYSTEM; unified identity model (EmailsOf + BestName functions; union-find dedup over email, clean First+Last, FullName/FileAs/Subject, email-derived name, raw mangled name signals); reconstructs real emails from all four email fields + email-split-across-name-fields; keys on real-email-or-name, never on junk Email1Address. +3. `treb-enhance.ps1` — Phase 3: non-destructive; parses phones, street addresses (high-confidence "street, City, ST ZIP" pattern), and emails from Notes into structured Outlook columns; Notes left verbatim. +4. `treb-fixaddr.ps1` — Phase 4: street-line cleaning (drops stray leading numbers and embedded newlines); 4 targeted address corrections from Notes. +5. `treb-template.ps1` — Phase 5: rebuilds into Outlook's exact 92-column template, UTF-8 no BOM, blank invalid dates. -**Final result:** 6,118 raw records → 674 unique contacts. 633 with email (all valid, 0 junk), 206 with phone, 67 with address, 272 notes preserved. 532 first+last, 71 first-only, 71 email-only (legitimately nameless in source — mostly role/business addresses). 16 unique PSTs scanned; 8 contact-bearing stores. +**Final deliverable:** `C:\claudetools\.claude\tmp\treb-data\Contacts-outlook.csv` (Howard-Home) = `C:\Users\Owner\Desktop\default.csv` (DESKTOP-QNP3ON5). 666 contacts, 92-col Outlook template, UTF-8 no BOM, 622 emails (all valid), 200 phones, 65 clean addresses, 267 notes, 0 duplicate emails, 0 duplicate names. Import confirmed: Contacts folder emptied (929 -> 0), re-imported clean (664 contacts now in default Contacts folder). -**Deliverable:** `C:\claudetools\.claude\tmp\treb-data\AT-Trebesch-Contacts-FINAL-20260601-210118.csv` (local, Howard-Home). 674 rows, 48 Outlook-native columns + 3 audit cols (Source PSTs / Source folders / Copies merged — ignored by Outlook on import). +**Scripts:** `.claude/tmp/treb-extract.ps1`, `treb-merge.ps1`, `treb-enhance.ps1`, `treb-fixaddr.ps1`, `treb-template.ps1`, `treb-dedup.ps1`, plus local path-swapped copies (`treb-merge-local.ps1`, `treb-enhance-local.ps1`) for Howard-Home iteration. -**Scripts:** `.claude/tmp/treb-extract.ps1`, `treb-merge.ps1`, `treb-enhance.ps1`, `treb-merge-local.ps1`, `treb-enhance-local.ps1` (local path-swapped copies for Howard-Home iteration) +**Data (local):** `C:\claudetools\.claude\tmp\treb-data\` — 15 per-PST JSON files + pipeline CSVs (Contacts-clean.csv, Contacts-final.csv, Contacts-outlook.csv). Source ZIP on Owner box: `C:\Users\Owner\Desktop\Contacts\treb-contacts-data.zip`. -**Data (local):** `C:\claudetools\.claude\tmp\treb-data\` — 15 per-PST JSON files + FINAL CSV. Source ZIP on owner box: `C:\Users\Owner\Desktop\Contacts\treb-contacts-data.zip`. - -**Pending delivery steps:** -- Transfer final CSV from Howard-Home to DESKTOP-QNP3ON5 (RMM push or manual copy) -- Import into Outlook and verify with client -- Log time + resolution note on Syncro #31953 -- Optional: name-cleanup pass for handle-style names; clean up intermediate CSVs from Desktop\Contacts +**Pending steps:** +- AWAITING Howard go: unmount 4 leftover source PSTs (Outlook1.pst, Outlook.pst, archive1.pst, backup.pst) from Outlook profile + clear Suggested Contacts (639) via RMM — these are causing the address book to show aggregate duplicates from the source stores despite the clean Contacts folder. +- Log time + resolution note on Syncro #31953. +- Optional: a few genuine cross-email same-person pairs remain unmerged (Ron Snyder, Judy Stout/U OF A JUDY, Irene/Reenie Keating, Philomina Bime) — ambiguous, acceptable residual. +- Optional: clean up intermediate CSVs from Desktop\Contacts and _work JSONs. --- @@ -122,8 +127,9 @@ Residential client in Tucson, AZ. Single workstation. Syncro customer 238740. On |---|---| | 2026-06-01 | Howard: GuruRMM onboarding — client + Main site created, SWIFT-LION-2892 enrollment key vaulted. DESKTOP-QNP3ON5 confirmed enrolled and checking in. | | 2026-06-01 | PST inventory scan: 24 files, ~155 GB. COM probe confirmed Outlook COM works in Owner session; 794/374/366 contacts in three live stores; archive1.pst contact-empty. | -| 2026-06-01 ~20:16 MST | Extraction executed (Owner session via RMM): safe set first (771 unique), then all-PSTs (826 unique — giants held real address books). | -| 2026-06-01 ~21:08 MST | Multi-pass data cleaning: email field corruption found and fixed, union-find dedup rewrite, enrichment pass (Notes → structured fields), data moved to Howard-Home for local iteration. Final: 6118 raw → 674 unique contacts, 0 invalid emails, 0 duplicate groups. CSV verified import-ready. | +| 2026-06-01 ~20:16 MST | Extraction executed (Owner session via RMM): safe set first (771 unique), then all-PSTs (826 unique — giants held real address books). Notes-enrichment pass added. Email field corruption found: Email1Address was junk single letters; rewrote merge to reconstruct real emails. Re-ran corrected pipeline: 821 unique, 0 junk emails. | +| 2026-06-01 ~21:08 MST | Multi-pass data cleaning on Howard-Home (local iteration): unified identity model (union-find over 5 dedup signals), derived-name + raw-name dedup to collapse last duplicates. Final: 6118 raw -> 674 unique contacts, 0 invalid emails, 0 duplicate groups. | +| 2026-06-01 ~22:46 MST | Import troubleshooting: diagnosed BOM-corrupted header causing Outlook to drop email/phone fields; rebuilt into exact 92-col Outlook template, UTF-8 no BOM. Fixed address-field artifacts (treb-fixaddr.ps1). Emptied default Contacts folder (929->0) via COM; pushed clean file (666 contacts, 622 emails) to Owner Desktop as default.csv via RMM (gzip+base64 chunks). Import succeeded: 664 contacts confirmed in default Contacts. Perceived "Tim Gleason duplicates" traced to leftover mounted source PSTs aggregating in address book — fix is PST unmount, not more deduping. | --- diff --git a/wiki/index.md b/wiki/index.md index e8e99e8..dcc9097 100644 --- a/wiki/index.md +++ b/wiki/index.md @@ -45,7 +45,7 @@ Run `/wiki-lint` to check for stale entries and broken backlinks. | [Anaise](clients/anaise.md) | Single workstation client; contact David (anaisedavid.office@gmail.com); DESKTOP-O8GF4SD; creds in vault at clients/anaise/desktop-o8gf4sd.sops.yaml; onboarding incomplete; M365 enrollment unconfirmed | 2026-05-24 | | [ACG Website (azcomputerguru.com)](clients/azcomputerguru.com.md) | Public website redesign (Astro); score 33/40; placeholder testimonials + no-backend form are pre-launch blockers; OKLCH token design system; see internal-infrastructure.md for ACG servers | 2026-05-24 | | [Quantum WMS](clients/quantumwms.md) | WMS company; quantumwms.com tenant (ddf3d2c9); GoDaddy decoupling + M365 migration; 2x Business Premium + Exchange Online Plan 1; deadline 2026-06-03; Tenant Admin consented 2026-05-26 | 2026-05-26 | -| [AT Trebesch](clients/attrebesch.md) | Residential, Tucson AZ; Syncro 238740; GuruRMM enrolled (DESKTOP-QNP3ON5, SWIFT-LION-2892); PST contact recovery complete (674 unique contacts from 24 PSTs, ~155 GB); delivery pending | 2026-06-01 | +| [AT Trebesch](clients/attrebesch.md) | Residential, Tucson AZ; Syncro 238740; GuruRMM enrolled (DESKTOP-QNP3ON5, SWIFT-LION-2892); PST contact recovery imported (666 contacts, 622 emails, 92-col Outlook template, no BOM); pending: unmount 4 source PSTs to clear address-book aggregation duplicates | 2026-06-01 | ## Projects