finish SwiftData migration with @Query views
iOS CI / Build and Test SwiftUI App (push) Canceled after 0s
Build Unsigned iOS and macOS Apps / Build Unsigned iOS IPA (push) Canceled after 0s
Build Unsigned iOS and macOS Apps / Build macOS ZIP (push) Canceled after 0s

- Drive chat list, timeline and forward picker from SwiftData @Query
  instead of AppModel's in-memory arrays; inject the per-account
  ModelContext from RootView with an in-memory fallback.
- Physically delete locally deleted messages (context.delete) and
  purge rows marked deleted by older builds on store open, so @Query
  views never resurrect them.
- Delete the legacy JSON snapshot only after a successful import save
  and restore the completeUntilFirstUserAuthentication data protection
  attribute on the store file.
- Mirror the old ChatArchive tolerant decoding in LegacyArchiveImporter
  so snapshots from older schema versions (missing reactions,
  isGroupMessage, roster fields) still import.
- Cover the new behaviour in ArchiveStoreTests and guard it with new
  verify.sh invariants; update AGENTS.md, ARCHITECTURE.md and
  SECURITY.md.
This commit is contained in:
wt
2026-08-29 00:57:08 +07:00
parent 277d8654c3
commit 2884810ec4
16 changed files with 653 additions and 65 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

@@ -199,6 +199,7 @@
"size" : "29x29"
},
{
"filename" : "AppIcon-Watch-Notification-45mm@2x.png",
"idiom" : "watch",
"role" : "notificationCenter",
"scale" : "2x",
@@ -278,6 +279,7 @@
"subtype" : "44mm"
},
{
"filename" : "AppIcon-Watch-QuickLook-45mm@2x.png",
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",
@@ -285,6 +287,7 @@
"subtype" : "45mm"
},
{
"filename" : "AppIcon-Watch-QuickLook-49mm@2x.png",
"idiom" : "watch",
"role" : "quickLook",
"scale" : "2x",