Please read https://morethanone.info/ if you are not familiar with plurality before reading further. Specific members of a system shall be referred to as headmates in this text.
This topic will discuss providing features to improve the accessibility of Delta Chat for plural systems. Headmates are likely to want to be able to be easily identifiable as specifically them when talking to other users on chat platforms.
Currently systems which frequently switch between headmates or have a large amount of headmates face frustration with being clearly identifiable in Delta Chat. Profiles are not easily able to be switched to and managing many profiles can be very tedious, requiring each headmate to join a group chat; this does not scale well.
We are proposing as a solution for this: sub-profiles. When a user has selected a sub-profle, messages they sent will be under the name and image of that sub-profile. These would be allow systems to comfortably switch between headmates on every group chat they are in and without worrying about managing multiple profiles.
https://pluralkit.me/ is one of the most widely used tools for plural accessibility, with over 1 million guild installs on discord. This proposal is directly inspired by the UX of Pluralkit for systems, as it is likely the best tooling currently available. However, as it works through deleting and resending messages via webhooks it causes visual jitter in the chat UI that can be confusing for users who have not interacted with systems before due to BOT tags in messages it proxies. A similar solution directly integrated in the chat platform would not have these drawbacks.
https://stoat.chat/ is also already doing similar work to provide this feature called masquerade, however it has only been implemented on server-side and has no way to be easily used in the UI. Its name is also somewhat problematic, as “masquerade” is not neutral towards plural use (see addendums/naming).
As with any other accessibility tooling these sorts of things have benefits for users outside of just the main target audience, sub-profiles can be used for things such as:
- More personalized name and profile picture for specific contexts
- Roleplaying characters
- Clarity for multiple physical individuals working from the same account
- Anecdotal evidence of a Siamese twins case benefiting
Implementation
This is a list of all the possible work necessary for the implementation of this proposal. Annotations are provided below.
Inherent: Required for this to exist
Usage: Ways users would use the feature
Social: Extras for communicating to other users usage of sub-profiles
Convenience: Extras that would be helpful to some users
- Inherent: sending messages via premade sub-profile
- Globally managed and not chat specific
- Synchronized between devices
- Inherent: sub-profile creation/editing/deletion
- A sub-profile should have the same information root profiles do, ie a bio
- Inherent: messages carry their sub-profile’s names & avatars
- Usage: switching & triggers
- GUI interface for switching between sub-profiles
- Text input to allow switching between sub-profiles to be more fluid and quick
- Reimplement common trigger modes from existing tools (see addendums/pluralkit proxy triggers)
- Ability to edit a sent message and re-assign it to a different sub-profile without deleting
- Social: sub-profiles listed in profile (off by default, toggleable globally or per-chat)
- Social: arbitrary depth nesting of sub-profiles
- Convenience: separate export/import for only sub-profiles
- Would allow for migrators from Pluralkit to easily switch over if compatible or easily convertable from Pluralkit’s export
- Convenience: chat-specific overrides for sub-profile fields (name/icon/etc)
- Alternatively also having specific sub-profiles for chats would also work here
Frontend
- Modal for management of sub-profiles, accessible in settings
- Button in the message composer that provides a drop down with sub-profiles to switch to
- Synchronized with switching through text input if latching (see addendums/pluralkit proxy triggers)
- A button for opening the sub-profile management modal could be convenient in the menu as well
- Contact modal when opening a sub-profile from the chat should show the info of the sub-profile and the root profile as well
- Support for setting several icons on a profile instead of just 1
- Paging through icons in profile view similar to telegram?
- Automatically keep X old icons in there for everyone regardless of whether they use sub-profiles?
- If social features added: browsable profile tree (list sub-profiles of current profile, navigate to sub-profile, navigate to super-profile, jump to system root)
- Bonus: graph view (no one asked for this but it would be funny)
addendums
naming
Name choice criteria:
- usage-agnostic (do not imply limitation to “only plural systems”, “only clear-cut plural systems”, “only systems of particular type” etc)
- no value judgement (do not imply a specific nature/inner structure of the action, ie a level of deceit, a particular amount of identity separation)
“sub-profile”
Presently used in this doc. Does not imply particular usecase. Does not imply inner structure behind usage. Does imply user-profile objects associated with the feature; that is indeed part of the proposal.
“alias”
Does not imply particular usecase. Does not imply inner structure behind usage. Confusable with email aliases.
“masquerade”
Stoat term. Implies a particular usage (roleplay / pretense). Implies masquerades are merely a cosmetic choice or disguise for a profile.
“proxy”
Pluralkit term. Socially neutral, but a result of implementation details (pluralkit bot needing to intercept and proxy messages due to discord API limitations); as such does not make much sense in a native impl.
“tupper”
Tupperbox term. Implies a particular usecase (skewed strongly towards tulpagenic systems).
terminology to avoid
“parent/child” for sub-profile tree: undesirable for social reasons (implies parent-child relationship between system members where none might exist).
Sub-profile disambiguation
This proposal initially contained subprofile disambiguation UI features; however, it was decided against it after further discussion and reading this post.
Implementing any kind of disambiguation together with this would proliferate the assumption that using sub-profiles is positively correlated with trying to deceive correspondents, effectively turning into tool-level discrimination. Sub-profile ambiguity is easily resolvable by asking or by opening the contact modal by clicking on the profile. Any disambiguation should not be done specifically for sub-profiles on the chat level. Release timing also matters.
Shorthash/hashart glance identifiers on accounts are worth their own proposal, but if they’re conflated with this one they’ll create a negative connotation.
Pluralkit proxy triggers
What is familiar to PK users so far. Close replication would help users migrate.
tag/prefix
- User defines a textual prefix/postfix for a specific proxy (
A/textforAlice,B/textforBeth) - Pluralkit sees incoming message
- Message matches proxy tag (
A/good morning)? Pluralkit sends the message under corresponding proxy (Alice: good morning)
this always has priority over everything else
automatic (preselected)
- User sends a pluralkit command, selecting a specific proxy (
pk;autoproxy Alice) - Pluralkit sees incoming message
- Message has a tag (
B/good morning)? Pluralkit sends message under corresponding proxy (Beth: good morning) - Message has no tags (
good morning)? Pluralkit sends message under proxy from step 1 (Alice: good morning)
automatic (latch)
- User sends a pluralkit command, activating latch mode (
pk;autoproxy latch) - Pluralkit sees incoming message
- Message has no tag (
hello) & no last used proxy is known? Do nothing (System: hello) - Message has no tag (
hello) & a last used proxy is known (Alice)? Send under last used proxy (Alice: hello) - Message has a tag (
B/hello)? Send message under corresponding proxy (Beth: hello); set “last used” to the corresponding proxy
Scope for “last used” is kept for several hours to prevent situations where the system logs off for several hours and then misproxies a message by mistake.
Credit
- Cowritten by @cyanidesunrise
- Reviewed by several creatures