The bar's markup moved into the design system (BottomNav 0.35.4) and BottomBar became what only this app can know: which sections exist, what each one routes to, and that tapping Conversation on home brings the tucked-away composer back instead of navigating nowhere. What is new for the user: - a second level. Tap the section you are already in and its pages rise from behind the bar — Dashboards (activity, analytics, environment, graph), Files (memories, plans, goals, skills, agents, notifs) and Settings (shortcuts, tags, cron). Five slots per drawer; the rest wait in the hold-to-rearrange stash, and both orders persist server-side under the new "nav-sub" list. - swipe navigation. A left/right swipe on the content area walks the bar one section at a time, with the page following the finger; inside an expanded section it walks that section's pages and steps out past either end. Swipes that start in a horizontal scroller or on the bar itself are left alone. nav.ts grew SUB_SECTIONS (the second level, with the route prefixes each entry owns) and navKeyOf(), which resolves a path to the finest-grained bar destination — sectionOf() is unchanged and still owns the sections. Also the frontend's first test setup: vitest + testing-library + jsdom, 60 tests covering the bar (sections, active route, taps, the composer tap, drawers, swipes) and the route→section/sub-section mapping.
800 B
800 B