[iOS][Stela Migration] Navigation calls update — Private Files - #573
Merged
luciancerbu-vsp merged 4 commits intoJul 21, 2026
Conversation
Behind the use_stela_navigation flag (default OFF) with V1 as an automatic failsafe — no production change until flipped. Covers folder nav/listing, record detail read, name/description/location edit (single + batch), publish/copy, and non-My-Files/batch reads. 132 unit tests pass. Co-Authored-By: Claude Opus 4.8
Follow-up work on the VSP-1777 branch after the Stela V2 migration commit: an app-wide bug-scan hardening pass, the cross-process upload-queue fix, and the fixes from a full new-user E2E exploration. No production behavior change until the Stela flag is flipped. Full unit suite green (2767/0); every fix confirmed against the code and adversarially reviewed. App-wide bug scan (all 4 targets): - Data-loss/correctness: download cache keyed by record identity (was colliding on same-named files), 24h capture-filename timestamps, Int->Double lat/long bridge. - Uploads: ShareExtension<->app queue moved to an NSFileCoordinator App-Group file store (was a non-atomic UserDefaults read-modify-write race across processes); BaseOperation state lock; Phase-3/completed marker lock; cancel temp-file cleanup; stale-restart gated on background duration; clear queue only after successful persist. - Networking: off-main JSON decode with deliver-on-main; CDNSession delegate leak; error-only logging with a 10KB body cap. - Session/auth: no-archive session decode; sign-out ordering; MFA completion; multipart error surfacing; biometrics main-thread hop; single session-expiry alert. - Shares/onboarding/deep links: deny/revoke feedback, invite-accept alert, storage-quota error, share-link expiry display, SideMenu observer leak + safe row mutation, truncated /p universal-link guard. New-user exploration fixes: - F1 (HIGH, onboarding lockout): invited users whose archives are all accepted can proceed again — enable Next and adopt the first accepted archive; mixed accepted+pending is left to the Accept button. - F2 (date): shared DateUtils.displayDate / date(fromISO:) — "Mar. 30, 2018" per Figma, robust to full-ISO and Postgres timestamps; fixes the raw-ISO share sheet and the blank detail Date field. - F2b (size): Int64.readableFileSize — always a period, never a locale comma; matches the design and the Storage screen; routed through every file-size site. - F3: one-shot retry on foreign public-archive load. Test infra: V1<->V2 parity harness — a DEBUG launch-arg flag toggle, a nav-source signal, and the first parity XCUITest. Staging config: Permanent-Staging.entitlements gains the shared App Group so the ShareExtension and app share the upload queue on staging. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Add `force: true` to all three adhoc match calls (app + Push + Share extensions) in the update_devices lane. `force_for_new_devices: true` alone only regenerates when it detects a device-count change, which silently no-ops with App Store Connect API-key auth — so newly registered tester devices were not picked up (a device registered weeks before a build still got no Firebase App Distribution install button). `force: true` unconditionally recreates the profiles from the current portal device list on every run, which is the intended behavior for this manual, refresh-only lane. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Nav supersede/completion: getFolderChildrenV2 now ALWAYS completes exactly
once via a new ChildrenFetchOutcome enum (.committed/.superseded/.failed).
A superseded fetch previously dropped its completion, leaving the tap's
spinner hanging ("content doesn't load"). navigateV2 applies the policy:
forward-superseded retries once so a racing background refresh can't eat
the tap; back/refresh completes quietly; a superseded fetch never runs the
V1 failsafe (its out-of-order response could overwrite the newer listing).
Adds a childrenFetchV2Request injection seam to test this without network.
- HEIC white square: drop thumbnailUrls.256 (the Archivematica access-copy —
a 48x48 that comes back blank for HEIC) from resolvedThumb256 in both
FolderChildV2Data and RecordV2Data; fall through to the .thumb.wNNN
renditions instead.
- Full-res "small then zoom": swap the full-res image and recompute its
fitted geometry atomically before the blur fades, and raise
maximumZoomScale to max(1, minScale) so sub-screen originals fill the
width instead of clamping to native size. Guard setZoomScale against a
zero/partial layout.
- Thumbnail failure no longer paints the failure card: thumbnailLoadDidFail
downgrades to the loading state while the full-res pipeline is still in
flight, so a transient blip doesn't flash "Couldn't load image."
- .retryFailed on SDWebImage loads so one transient CDN failure doesn't
blacklist the URL for the session.
Adds unit tests for the supersede policy, thumbnail-failure states, and the
fitted-geometry invariant.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
flaviahandrea-vsp
approved these changes
Jul 15, 2026
luciancerbu-vsp
deleted the
feature/VSP-1777-iOS-Stela-Migration-Navigation-calls-update-Private-Files
branch
July 21, 2026 10:17
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Files nav + record read/write/publish to Stela V2