# Birth Biologic — Quality Systems Department -> Datto sync — COMPLETE **Date:** 2026-06-30 **Completed by:** Mike Swanson / claude-main (GURU-5070) **Status:** COMPLETE — verified against live Graph enumeration ## Outcome Every file in the Datto source is now present in SharePoint. | | Datto (source) | SharePoint (final) | |---|---:|---:| | Files | 3,768 | 3,769 | | Datto files missing from SharePoint | — | **0** | All 301 large files (>=4MB, ~29.7 GB total, largest a 3.94 GB .mov) were uploaded via Graph chunked upload sessions. The idempotent size-check pass also detected and re-uploaded ~700 files that existed in SharePoint with a mismatched size (partial/corrupt residue from the earlier failed OneDrive/PUT attempts). ## The 4 intentional differences (live current work — PRESERVED per Mike, 2026-06-30) These are the "recently modified, do not clobber" carve-out. Confirmed as live edits made *today* by named client staff, so they were left intact rather than forced to match Datto: | File | Datto size | SharePoint size | Note | |---|---:|---:|---| | `LOGS/Equipment/3. Temp Excursions/Temperature Excursion Log.xlsx` | not present | 40,253 | Created 2026-06-30 by Mary Ster, edited by Kristin Steen | | `LOGS/Equipment/2. Validation List/QSP-200.003.A Validation List.Current.docx` | 41,908 | 51,510 | Locked/open, edited today | | `LOGS/Equipment/1.Equipment List/QSP-200.001.C Equipment List.Current.docx` | 47,947 | 57,545 | Locked/open, edited today | | `LOGS/Quality Assurance Reporting Log/Deviations/2024/DEV39.Exhibit B.docx` | 15,525 | 22,437 | In use, edited today | The three docs surfaced as upload "errors" (HTTP 423 Locked / 409 Conflict) precisely *because* staff had them open — SharePoint's lock protected live work. That is the correct result, not a failure. ## What actually fixed it (root cause of the all-day Mac failures) 1. **The prior upload script skipped every file >=4MB.** Datto has 301 such files (~29.7 GB). The old approach could never reach 3,768 no matter how many times it ran. Fix: proper Graph **upload sessions** (10 MB chunks, `Content-Range`) for large files. 2. **RMM agent ignores the `timeout` field; it honors `timeout_seconds`.** Commands sent with `timeout` were capped at ~300 s, so long uploads died / went zombie ("running", no output). Using `timeout_seconds` allowed multi-minute/multi-hour commands to run to completion. 3. **Long paths (>260 chars) in the Datto tree** were handled with the `\\?\` prefix for file reads. ## Method - `clients/birth-biologic/scripts/enumerate-datto.ps1` — enumerate Datto, write a `relpath|size` manifest to `C:\Windows\Temp\quality-manifest.txt` on ACG-DWP-X-BB. - `clients/birth-biologic/scripts/upload-quality-final.ps1` — idempotent uploader: for each Datto file, skip if SharePoint already has it at matching size; else upload (simple PUT <4MB, chunked upload session >=4MB). Long-path safe, refreshes the Graph token on long runs, internal time budget + progress log (`C:\Windows\Temp\quality-upload.log`). - Ground truth verified from this machine via the Graph **delta** endpoint (whole-drive enumeration; far fewer round-trips than recursive `children` calls). ## Agent / drive - Agent: ACG-DWP-X-BB (`a4524e85-8a07-45d0-91b1-51ce7e2ca74a`) - Datto source: `C:\Users\Public\Desktop\Datto Workplace Server Projects\Quality Department` - SharePoint drive: `b!F8BzMb1YakCIWCyWlmczb09LHqtxDxVMpLT6kAwYmsM7NUY4oPLSRq7ng3tJq-E9` - Graph app: `msp-tools/computerguru-tenant-admin` (tenant 19a568e8-...) ## Note on the earlier docs The earlier `2026-06-30-quality-sync-to-datto.md` (surgical 5-file delete) and `CONTINUE-QUALITY-SYNC.md` (wipe + re-upload, in progress) describe superseded intermediate states. This file is the authoritative final record.