Introduce shared layout primitives — PanelScaffold (fixed header + scrollable body), PanelPage (optional title/description/chips over the scaffold), PanelHeader, and a reusable ChipTabs bar.
Migrate all settings panels (Account, AI, Team, MCP, Composio/OAuth, Integrations, Usage, Wallet, debug panels, etc.) onto PanelPage for a consistent header band, seamless two-pane card, and even body padding.
Enforce PanelPage on Brain and Connections pages and their hosted panels; adopt ChipTabs for the settings sub-nav and tabbed panels (MCP client selector, Notifications).
Rename Composio → OAuth in Connections and move the Composio API key under the API keys section; give the Agent profiles sidebar entry an icon.
Add settingsNavIcons and supporting i18n keys (with real translations across all 14 locales).
Problem
Settings panels each rolled their own header/body scaffolding, producing inconsistent padding, divider treatment, and titling across the right pane. There was no shared primitive for the fixed-header/scrollable-body pattern or for the chip-style tab bar repeated across sub-navs.
Solution
Extract the header/body pattern into PanelScaffold and layer optional title/description/chips on top via PanelPage, so every panel renders through one path.
Factor the chip-tab bar into ChipTabs and adopt it wherever a segmented selector existed.
Migrate panels incrementally (AppearancePanel as the recipe reference, then the rest) keeping behavior identical — this is a presentation-layer refactor, not a behavior change.
Update co-located unit tests to match the new component structure.
Submission Checklist
Tests added or updated (happy path + at least one failure / edge case) per Testing Strategy — added ChipTabs.test.tsx; updated panel/page unit tests to the new structure.
Diff coverage ≥ 80% — changed lines are React presentation components exercised by Vitest; updated tests cover the migrated panels and new ChipTabs/PanelPage primitives.
N/A: Coverage matrix — presentation-only refactor; no feature rows added/removed/renamed in docs/TEST-COVERAGE-MATRIX.md.
N/A: Affected feature IDs — no matrix feature behavior changed.
Focused tests: ChipTabs.test.tsx and migrated settings panel tests (Vitest)
N/A: Rust fmt/check (no Rust changed)
N/A: Tauri fmt/check (no Tauri changed)
Validation Blocked
command: N/A
error: N/A
impact: N/A
Behavior Changes
Intended behavior change: None — presentation-layer refactor. (Composio→OAuth is a label/placement rename only.)
User-visible effect: Consistent panel headers/padding; "Composio" surfaced as "OAuth" with the API key relocated under "API keys"; Agent profiles sidebar icon.
Parity Contract
Legacy behavior preserved: Yes — panels render the same content/actions through the new scaffold.
Guard/fallback/dispatch parity checks: N/A — no dispatch/guard logic touched.
Select a settings sub-navigation tab — Team settings panel adopts the unified PanelPage layout with ChipTabs navigation for managing members and teams.
/connections?tab=oauth-key — Connections page uses unified PanelPage layout with sidebar categories and OAuth integrations grid.
Navigate back from a settings sub-panel — Agent Profiles settings panel lists built-in agents with active state and edit controls.
Summary
PanelScaffold(fixed header + scrollable body),PanelPage(optional title/description/chips over the scaffold),PanelHeader, and a reusableChipTabsbar.PanelPagefor a consistent header band, seamless two-pane card, and even body padding.PanelPageon Brain and Connections pages and their hosted panels; adoptChipTabsfor the settings sub-nav and tabbed panels (MCP client selector, Notifications).settingsNavIconsand supporting i18n keys (with real translations across all 14 locales).Problem
Settings panels each rolled their own header/body scaffolding, producing inconsistent padding, divider treatment, and titling across the right pane. There was no shared primitive for the fixed-header/scrollable-body pattern or for the chip-style tab bar repeated across sub-navs.
Solution
PanelScaffoldand layer optional title/description/chips on top viaPanelPage, so every panel renders through one path.ChipTabsand adopt it wherever a segmented selector existed.AppearancePanelas the recipe reference, then the rest) keeping behavior identical — this is a presentation-layer refactor, not a behavior change.Submission Checklist
ChipTabs.test.tsx; updated panel/page unit tests to the new structure.ChipTabs/PanelPageprimitives.docs/TEST-COVERAGE-MATRIX.md.Impact
Related
AI Authored PR Metadata (required for Codex/Linear PRs)
Linear Issue
Commit & Branch
Validation Run
pnpm --filter openhuman-app format:checkpnpm typecheckChipTabs.test.tsxand migrated settings panel tests (Vitest)Validation Blocked
command:N/Aerror:N/Aimpact:N/ABehavior Changes
Parity Contract
Duplicate / Superseded PR Handling