Objective
Find consensus on naming and semantics of concepts we use to design and implement features related to user and chat management.
Request
Please comment on the labels and definitions outlined below. Any disagreement, concerns or comments about applying them. Biggest suggested changes are:
- Move away from all use of the word [Contact] because of its ambiguous meaning.
- Introduce an additional layer [Assigned user]
- Introduce [Groups] that a user can be assigned to, [Trusted users] being a default group. This offers more flexibility going forward to manage privacy settings and is in line with a more clear distinction in the UI between [Blocked users] and [Trusted users] shortterm.
Note that labeling may or may not appear in the UI. This is a seperate conversation that can be more constructive one we have accurate and agreed on definitions.
Reason
In recent weeks inconsistent references to contacts and actions related to them surfaced. For example when [Removing] a [Contact], on a contactâs Profile screen, this contact would still be visible in the [Profile] > [Contact list] after restarting the app. https://github.com/status-im/status-react/issues/3585
Evidently this example occurs because a contact is never really added or removed. Itâs merely shown and hidden. This requires taking into account dependencies such as when to show [Add to contacts] and generally increases the risk of inconsistency.
Explicit call for anyone with experience in documenting OWL and RDF schemas to contribute to add more structure to these concepts.
Thanks to @cammellos @yenda thanks for pre-discussing, please comment on any required changes.
Actors
User
Anyone you have exchanged a 1-to-1 message with.
Group
A labeled container that can hold a list of users that a given user considers the same, e.g. âTrusted usersâ.
- A user can only assign others users to a single group.
- âTrusted usersâ is a default group
- Sharing settings can be specified by group
- Depending on the perspective, groups can be those that a user has been assigned to and those that the user as created and assigned others to.
Assigned user
Anyone you have assigned to a group, e.g. âTrusted usersâ
Assigner
- The user who assigns or has assigned another user to a group (i.e. marks another user as a particular type of user).
Assignee
- The user who is assigned to a group by another user (i.e. marked as a particular type of user).
Trusted user
A user who has been assigned to the group âTrusted usersâ.
- a.k.a Contact
Trusted users
List of users who have been added to this default group.
- a.k.a. Contacts
Mutual trusted users
Two users who have assigned oneanother to a user group âTrusted usersâ.
:::info
dd March 20, this includes chosen avatar and chosen name. Chosen name will be removed as part of Core Profile epic. Read more: Status.app
:::
Diagram of actors
Chats
1:1 chat
Collection of messages between 2 contacts who may or may not have assigned oneanother.
Public channel
Collection of messages that are assigned to a topic that anyone can tune into and fetch.
Group chat
Collection of messages between a set of max 10 individuals.
Actions by user and chat
View
View information about any user, where the visible information differs depending on if and what group this user has been assigned to.
Assign to group (at the moment Add to Contacts)
Assigning another user to a group, e.g. âTrusted usersâ
Send connection request
Request by a user to be assigned to the default âTrusted usersâ group.
- This may or may not require the requester to add this user to the default âTrusted contactsâ group themselves.
Accept connection request
For a user to grant a request to add another user to a default âTrusted contactsâ group.
Send message
Start a 1-to-1 chat by sending an initial message to another user. Users may or may not be assigned by eachother to a group.
Receive message
Receive an initial message from another user. The other user may or may not be assigned by eachother to a group.
Send transaction
Send transaction to another user. This action is disabled until the other user has assigned the user sending a transaction to a group that enables visibility of the wallet address.
==We currently still allow sending a transaction to any profile. Meaning we actively expose the wallet address. Iâve found that his has been and is a topic for debate and will address this in another discuss post.==
Send transaction request
Sending a transaction request, that includes ones wallet address, to another user.
==We currently only offer this option in a 1-to-1 chat regardless of whether someone is a trusted user. Is this a command we want to enable in public and group chats? For example to request donations==
Share profile link
View, Select and Copy/Send another userâs contact code to another person or entity inside or outside of Status.
==At the moment any user can Share another userâs profile link. Similar to Send transaction, this is topic for debate and Iâll address this in another discuss post==
Invite to group chat
Send a message to users inviting them to a group chat. Only users who receive an invite can join.
Delete
Remove the user from an assigned group. This only impacts the client of the assigner. The other user will no longer receive profile updates. Any profile information that has been shared will remain visible.
Block user
Removes all previously sent messages and no longer shows new messages sent by this user. The other user is not notified of being blocked, can continue to send messages and profile information that has been shared will remain visible to them.
The blocked user can create a new account, and send a message to the user who blocked them, given that they can identify them by their random name in chat or have access to their Contact code. The user who blocked them will see their message with a blue circle on their avatar, signifying them as a ânewâ user.
1:1 Chats
Delete
Remove the chat from the chat list. Users of the chat are still able to [Send a message] and thereby add the chat back to the [Chat list].
Start
Send a message from another users profile or by adding their ENS name or contact code in Start chat.
Public channels
Delete
Stop listening to a topic. The user will no longer see this channel or its messages as the client will be unsubscribed from this channel and will no longer fetch messags for this topic.
Join
Start listening to the public channelâs topic. The channel will be added to the chat list.
Create
A channel is not âcreatedâ, rather a first message is sent, registering a topic it belongs to. From thereon out, the topic is included in the userâs Chat list as a channel and anyone fetching messages for this specific topic will see the topic in their chat list and can view and send messages belonging to the same topic.
We currently do not distinguish between sending a first message or joining an active chat.
Group chat
Create
Select contacts from the default assigned group âTrusted usersâ, label the group, and send an invitation.
Invite
Select Trusted users upon creation of the group or [Add members] on the group Profile view after a group has been created. This allows users to be added by existing members, who the creator has not added to a âTrusted usersâ group.
Join
Accept an invitation to a group chat; this will inform members of the group that the user has joined.
Decline
Decline an invitation to a group chat; this will inform members of the group that the user has left.
View group info
Group info, including itâs members becomes available after joining a group and includes those who have joined the group.
Delete
Anyone can Delete a group chat from their chat list. The group chat will remain for others, showing that the user deleting the chat has left. A user can be re-invited upon which the group will reappear in the users list.
Clear history
Clear history removes all messages in any given chat.
==Any specifics on the purpose to be added: To avoid any association to conversations when phone is confiscated, save memory?==