mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-06-07 00:12:20 +00:00
62 lines
2.6 KiB
Markdown
62 lines
2.6 KiB
Markdown
# SimpleX Chat iOS -- Known Gaps & Recommendations
|
|
|
|
> Aggregation of `[GAP]` and `[REC]` annotations discovered during specification analysis. Organized by product area.
|
|
>
|
|
> **Related spec:** [spec/README.md](../spec/README.md)
|
|
|
|
---
|
|
|
|
## UI: Error Feedback
|
|
|
|
### GAP: No user-visible error on FFI command failure
|
|
**Source:** [spec/architecture.md](../spec/architecture.md)
|
|
API calls via `chatApiSendCmd` return `APIResult<R>` which can be `.error(ChatError)`. Not all error cases surface user-visible feedback in the UI.
|
|
|
|
**REC:** Audit all `chatApiSendCmd` call sites and ensure `.error` cases show appropriate alerts or banners.
|
|
|
|
---
|
|
|
|
## UI: Loading States
|
|
|
|
### GAP: No loading indicator during initial chat list population
|
|
**Source:** [spec/client/chat-list.md](../spec/client/chat-list.md)
|
|
When `ChatModel.chatInitialized` transitions to `true`, the chat list appears fully formed. There is no intermediate loading state for users with large numbers of chats.
|
|
|
|
**REC:** Add a progress indicator during `apiGetChats` for users with 100+ conversations.
|
|
|
|
---
|
|
|
|
## Flows: Group Lifecycle
|
|
|
|
### GAP: Bulk member role change — API supports batch but UI uses single-member calls
|
|
**Source:** [spec/api.md](../spec/api.md)
|
|
`APIMembersRole` accepts `NonEmpty GroupMemberId`, supporting batch role changes at the API level. However, the iOS UI (`GroupMemberInfoView.swift`) currently invokes it with a single member at a time.
|
|
|
|
**REC:** Expose batch role change in the UI for group admins managing large groups.
|
|
|
|
---
|
|
|
|
## Security
|
|
|
|
### GAP: Database passphrase not enforced by default
|
|
**Source:** [spec/database.md](../spec/database.md)
|
|
Database encryption is optional and requires the user to manually set a passphrase. New installations start with an unencrypted database.
|
|
|
|
**REC:** Consider prompting users to set a database passphrase during onboarding, especially on devices without hardware encryption.
|
|
|
|
### GAP: No forward secrecy indicator in UI
|
|
**Source:** [product/glossary.md](glossary.md)
|
|
While the double-ratchet protocol provides forward secrecy, there is no UI indicator showing whether a specific conversation has achieved forward secrecy (i.e., completed initial key exchange ratcheting).
|
|
|
|
**REC:** Add a security indicator in contact/group info showing ratchet state.
|
|
|
|
---
|
|
|
|
## Documentation
|
|
|
|
### GAP: Haskell Store layer not fully specified
|
|
**Source:** [spec/database.md](../spec/database.md)
|
|
The Haskell Store modules (`Store/Direct.hs`, `Store/Groups.hs`, `Store/Messages.hs`, etc.) are referenced by function name but not fully specified with parameter types and return types.
|
|
|
|
**REC:** Expand database spec with key Store function signatures as the specification matures.
|