Repository navigation
Conversation
People need a single place to move between a contact's messages, files, and saved profile. Keep the existing archive scopes and identity actions while giving people and domains the same browsing flow. Daily domain activity must count each sent message before chats collapse into conversations. Otherwise a conversation spanning several days hides activity from the calendar and disagrees with the messages for that day.
Searching for a person's name must leave their files and messages intact. The identity endpoint already includes linked aliases; an extra filter on one participant hid activity that the calendar still counted. Message filters belong to the shared browsing history so Files, Back, and reload keep the same context. A person page also needs to remain usable when the old, undisplayed timeline request fails. Saved-profile reads can finish after the user chooses another row. That old result must leave the newer choice and its selection intact.
A selected day must survive a visit to Details without changing the date filters shared with Files. Conversation readers need the same day bounds so a chat opens on the activity the user selected. Filtered activity dates can hide earlier calendar years. Keep lifetime contact dates separate from contextual metrics so the calendar still shows the full relationship. An expired Saved People cursor leaves useful rows on screen. Offer Reload there so the user can recover without leaving the workspace. Daily group requests remain available without making day a saved grouping that the browser cannot restore.
Meeting follow-ups must use the same person, domain, and selected day as the messages beside them. The shared summary needs the existing direct relationship scope because a detached table predicate has no identity. Changing message filters and visiting Details should preserve the chosen calendar year. Keep the open identity in place while its metrics refresh, and give the domain year the same page lifetime as its selected day. People name searches belong to the People workspace. Keeping that query separate prevents a later Messages visit from searching message text for the person's name. Domain days now use the existing validated timezone conversion so evening messages appear on the same date in the calendar and the message table.
An open person page must reflect the addresses it represents after a link or profile merge. Keeping the page mounted left its message list on the previous identity scope. A second bulk link could also start before the first profile merge finished reconciling. The shared message table must preserve the relationship page's attendance rule, so opening a person does not add events the owner never attended. Keep Tasks setup reachable from its reader and calendar shades consistent with the shared activity scale.
A saved contact can have only drafts in the archive. Its profile must stay reachable when there is no sent activity to summarize. Choosing another calendar period ends the previous reader selection. Initial history restoration still needs that selection, and calendar revision changes must stop retrying when the archive keeps moving. Filters shown on Domains must describe the domain request they affect.
Following another person and returning should reopen the same message, including its original calendar-day window. A message opened beyond the first result page needs the existing restoration walk to find it again. A bound domain year can settle during initial rendering. Keep that setup from fetching the same calendar twice.
Opening a conversation after choosing a calendar day must retain the reader selection. Reading that selection while notifying a predicate change subscribed the loader to it and triggered another load. Keep regression checks at their owning components so browser journeys cover navigation without repeating request-level assertions.
A compact window could shrink the Messages wrapper below its table while the person page reported no scroll range. Mouse users could see the calendar but could not reach the rows below it. Let the embedded workspace keep its content height so the existing person page scrollbar can reach it.
The replaced Relationships workspace can still pass its old tests while the People page breaks. Remove those unreachable checks and keep reader restoration, calendar requests, and identity refresh at their live owners. Use valid calendar responses so refresh coverage follows the same revision checks as the application.
roborev: Combined Review (
|
Back and Forward should reopen the message saved in that history entry, including a conversation's original day and anchor. Returning from Directory should show the selected person's archived messages. Future events must leave historical domain activity visible on first open. Embedded Messages also needs to preserve one main landmark while keeping the reader available to assistive technology.
Escape should dismiss an open menu before closing the message or person beneath it. Earlier links remain committed when a later pair fails or a profile merge is cancelled. Keep their count visible so the user can see what completed. A later successful refresh also replaces the earlier stale-cache warning.
Returning to Messages after Files shows the full message table. Its chat reader must use that same range, so messages from other days remain available. Keep the earlier history entry's day window for Back.
A searched People list must follow the selected Name or Most recent order before pagination. Search without an explicit sort keeps relevance order. Typing a profile filter should keep Back on complete navigation steps. Clearing filters is one such step, so Back restores the complete prior set. Remove checks for the inactive list and timeline while their production retirement remains part of the later workspace change.
Shared setup keeps the existing calendar and linking cases together. Task setup forwarding belongs beside the person reader so its check can identify a broken callback without navigating through the shell. Use complete message rows and sent/unsent activity so request mistakes change the result. Exact timeline keys distinguish linked alias messages from an owner-absent event.
roborev: Combined Review (
|
Closest sends an explicit activity sort, and HTTP preparation supplies it when callers omit sorting. Both forms must keep text relevance so a busy partial match cannot displace a better match from the first page. Name and Most recent continue to use their requested order.
Saved People uses Directory's list but displays its own selected profile. Passing that selection into Directory starts a second profile read and requests for sections the People page never displays. Keep those detail requests with an actual Directory visit.
Opening an observed person clears the saved profile selection. The shell check must use that same navigation contract so it can exercise promotion conflicts without reopening the prior profile. Keep the saved-view rejection check on request-only day grouping, and make the documented promotion path follow the visible People controls.
An empty domain list should identify the selected facet so users can tell which archive results are missing. Keep the shared list layout and search empty state. The usage guides also need the live People meeting flow and the day-grouping request contract so readers can follow the controls and interpret counts.
People and domain calendars need one shading rule. Assign day levels with the existing server calendar policy so clients render the supplied levels and cannot drift from that policy. Levels rank the returned day rows, which cover the domain calendar's year. Other groupings omit them. Qualify the new client enum names to preserve the existing calendar exports.
Default People search must distinguish a strong relationship from a busy contact. Separate those rankings in the fixture before removing the repeated HTTP check. Keep person and domain meeting scopes beside the person message view. Use calendar responses the server can produce, wait for loading to settle, and leave quartile calculation assertions with their existing owner.
roborev: Combined Review (
|
Opening a person should not rebuild every archived message's participant list. Reuse indexed membership and enrich the selected page so identity clusters and chat membership keep their existing meaning at archive scale. A filtered summary failure needs a visible recovery action even when the person is loaded. Identity cache recovery must also survive switching tabs. Keyboard actions should follow the person whose checkbox was clicked.
A saved profile can retain addresses from disconnected identity clusters. Its Files tab must include those bindings, as Directory already does; using the first observed cluster silently drops the other addresses' files. Keep this file scope tied to the selected saved profile. Activity keeps the observed cluster chosen by the existing Directory relationship entry.
A saved profile can span disconnected identity clusters. Readers need to know why Files includes every binding while activity follows the existing Directory entry into one observed cluster.
Returning to Saved after a merge could leave the absorbed profile available to open. People shares Directory rows across visits, so a completed merge must refresh that list along with the open relationship.
API checks need to distinguish forwarded options and linked identities, while query tests own day counts and participant membership. Keep the workflow recovery checks without repeating their lower-layer details.
roborev: Combined Review (
|
|
Replaced by #1611. |
People now lists people and domains, each with one page. Before, a person's activity lived in Relationships and their profile in a separate Directory view.
Each person or domain with archived activity keeps the messages, files, and calendar Relationships showed. Full profiles still open in Directory until a later slice moves them into Details.
daygrouping withtimezoneandsent_onlyfields to/api/v1/explore/groups.people-navigation.webm
Refs #1552, slice 6 (People list and page)
Stacks on #1588