# Datto -> SharePoint FULL reconciliation - COMPLETE - 2026-07-02/03 ## Outcome **557 missing files recovered; all 5 site mappings independently verified at zero genuinely-missing.** | Site | Datto files | Missing found | Recovered | Verified residual | |---|---|---|---|---| | Donor Services | 57,329 | 74 | 73 | 1 = intentional ghost-skip ("26-02328 - Copy.pdf", same-size renamed sibling in SP) | | Admin | 6,301 | 472 | 468 + 4 (long-path retry) | 0 | | Birth Biologic Activity Reports | 1 | 1 | 1 | 0 | | Quality (QSD) | 3,768 | 11 | 11 | 0 | | Supply Management | 160 | 0 | - | 0 | sp-only counts (files in SP not in Datto: staff's new post-migration work) and size-diffs (docx uniformly larger in SP = SharePoint Office property promotion; content-harmless) are expected and documented per-site in C:\GuruCompare\ on ACG-DWP-X-BB. ## Root cause (answers "how was it missing after the sync to 0") The 6/27 delta upload used simple Graph PUTs which **silently skip files >=4MB**; the "reconciled to 0" claim trusted the uploader's own success reporting. Quality got the chunked-upload fix 6/30; Donor Services and Admin were never re-verified. Admin was worst (472 files, incl. >260-char long-path victims in consultant folder trees). Staff had begun manually recreating missing donor PDFs (e.g. 26-04085.pdf, Mary Ster, 7/2). ## Method (repeatable) `C:\GuruCompare\bb-fix-all.ps1` on ACG-DWP-X-BB (source in ClaudeTools scratch/session log): per-site full inventory diff (path+size, case-insensitive) + rail-guarded fix: - chunked upload sessions for >=4MB, simple PUT below - conflictBehavior=fail (never overwrites SP) - same-size-in-folder ghost detection (never resurrects renamed files) - \\?\ long-path file opens; FileShare::ReadWrite (Datto service can stay running) - fail-hard SP enumeration w/ 429 retry; sanity-abort if SP looks empty; per-site fresh token Run via GuruRMM per site: `powershell -File C:\GuruCompare\bb-fix-all.ps1 -Site ` (fresh Graph token to C:\GuruCompare\tok.txt first). Logs: C:\GuruCompare\-fix-log.txt. ## Gotchas hit (memorialized) - PS5.1 under RMM powershell -File: `-Headers $H` script-scope hashtable sent EMPTY Authorization ("Access token is empty") - build headers inline. Memory: ps51-invoke-restmethod-headers-variable. - Two failed runs masqueraded as token expiry / clock skew; capturing the Graph error BODY was what cracked it. - ACG-DWP-X-BB clock was NTP-corrected 8:03 PM 7/2 (had drifted while parked). ## Open items - OneDrive placeholder mirror on ACG-DWP-X-BB for standing local comparisons: policies ready to push; needs interactive OneDrive sign-in as sysadmin@birthbiologic.com via ScreenConnect. - Datto Workplace service on the VM left RUNNING (catch-net for the still-active donor-scan-to-Datto workflow; 2 scans from 6/29 + HR file were among the recovered). Decide: keep as ongoing catch-net vs re-freeze. - Client comms: staff can stop manually recreating missing April/May donor records.