# Navigation, profile, and announcements People organize their sidebar, move between company resources, maintain their profile, and dismiss product announcements with the correct persistence and identity scope. Implementation: [sidebar](../../ui/src/components/Sidebar.tsx), [profile](../../ui/src/pages/ProfileSettings.tsx), [announcements](../../ui/src/components/AnnouncementWell.tsx). Agent access: [companion](../agent-access-map/navigation-preferences.md). ## Sub-features - `navigation`: use current sidebar links, favorites, recents, and available layout controls. - `preferences`: persist supported ordering/collapse choices for the intended user/company. - `profile`: edit personal identity and inspect public profile links. - `announcements`: inspect and dismiss an announcement with its intended instance-wide user scope. - `fallbacks`: handle missing resources and old deep links without presenting another resource as the target. ## How to get to it (user POV) ### `sidebar-deep-links` Use starred/recent/sidebar links and direct company-prefixed URLs. ### `profile-announcements` Use Settings → Profile, `/u/:userSlug`, and the announcement well when a publication is available. ## Driving it with Playwright and the Paperclip CLI Preconditions: follow the [baseline](./README.md#before-driving-a-journey). Use two test users and companies; record the selected UI shell and any client-local preference storage. ### `sidebar-deep-links` Automated: [sidebar](../../ui/src/components/Sidebar.test.tsx) and [sidebar preference routes](../../server/src/__tests__/sidebar-preferences-routes.test.ts) cover UI/server behavior. Manual: Star and reorder supported resources, collapse a section, navigate and reload. Switch company/user and inspect the intended preference scope. Open an unavailable resource and a legacy route; verify clear fallback or correct redirect without leaking another company’s state. Record persistence separately: section collapse is in-memory and reopens after reload; global sidebar collapse is disabled. Streamlined starred projects sort alphabetically. Recents are browser-local by user/company; stars and supported ordering are saved server-side. Local-trusted mode does not prove two-user isolation. ### `profile-announcements` Automated: [profile page](../../ui/src/pages/ProfileSettings.test.tsx), [announcement hook](../../ui/src/hooks/useAnnouncement.test.tsx), and [announcement routes](../../server/src/__tests__/announcements-routes.test.ts) cover separate UI/persistence layers. Manual: Change a disposable user’s display details, reload, and inspect an attributed profile link. Dismiss a fixture announcement, switch companies, and verify it remains dismissed for that user; check another user still has their own dismissal state. ## Gotchas - Announcement dismissals are intentionally instance-wide user preferences, unlike company-scoped domain data. - Legacy/production shells need their own navigation check when affected. - A route redirect is part of the journey; do not document a removed screen as if it still renders.