[app] Use seen-by to demarcate "new" messages
Description
It's helpful for journalists to know which messages are new, to visually distinguish a new message from an ongoing conversation. This is a requested feature for higher-traffic instances.
Slack does this with a red bar delineating old from new, but that's in a single-user model (vs. a global inbox model).
Shared inbox behavior
While we do have individual "seen"data, we are opting for a demarcation that is global. This is to keep the behavior consistent between the source list (where, once one journalist has displayed a source, it is marked as "read" for all journalists) and the demarcation line in the conversation view.
It's also worth noting that, because journalist messages are "seen" by the journalist who sent them, only source content will ever show up as "new". This is intended behavior.
Acceptance criteria
Per the discussion in #2581:
- The app displays a
---- new messages below ----divider when new (not seen by anyone) source content is present. - The divider clears for everyone once any journalist views the conversation.
Design
To be developed.
How will this impact SecureDrop users?
This will make it easier for journalists to catch up on new source comments or submissions.
How would this affect the SecureDrop Workstation threat model?
No effect, UI only.
User Stories
As a journalist, I want to be able to see at a glance which messages I have not yet read in an ongoing message thread.
2025-08-14: Edited by @eloquence per conversations on #2581
This is likely applicable as written to the client rewrite; we had a preliminary discussion about exactly this in a recent UX check-in. Keeping open for now, but it may eventually be superseded by a new issue with the final spec we land on.
Thanks Ro for drafting this issue, which is still very much applicable to the new app.
There is one substantive way in which (as of current discussions in #2581) we may deviate from the original issue description, and that is in treating the state change as global: once any journalist has viewed a source, the "new items" line will clear for all journalists.
This is to keep behavior consistent with the way the source list "read/unread" styling behaves. If the state was per-user, you could view a source that is showing up as "read" in the source list but see "new items", which could be confusing and make it harder for users to internalize the "shared inbox" mental model.
I've edited the issue description accordingly, and added some suggested acceptance criteria. With that in mind, in addition to the design and placement of the demarcation line in the conversation area, I believe we'll still need to answer the following questions in the design process:
- What should the initial scroll position be when viewing a conversation with new items?
- Does the "new items" indicator need to offer any additional affordances for the user (e.g., "jump to new")?
In the client app rewrite, this is completed by https://github.com/freedomofpress/securedrop-client/pull/2835