Files
claudetools/clients/birth-biologic/reports/2026-07-02-datto-sp-full-reconciliation-COMPLETE.md
Mike Swanson 78f794a924 sync: auto-sync from GURU-5070 at 2026-07-03 13:18:27
Author: Mike Swanson
Machine: GURU-5070
Timestamp: 2026-07-03 13:18:27
2026-07-03 13:19:22 -07:00

2.9 KiB

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 <n> (fresh Graph token to C:\GuruCompare\tok.txt first). Logs: C:\GuruCompare<site>-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.