# HR + Finance shell redesign — report (reconstructed 2026-08-25) > Also published as an artifact: > https://claude.ai/code/artifact/5e0b90d8-e9dd-462b-819a-6aa19b83fc50 > **Why this file says "reconstructed".** The original report was destroyed with the rest of > the working tree on 2026-08-24 and was never committed to git. The restore the owner ran > came from a **2026-08-22** backup, which predates the entire redesign. This document > describes the shell **as it stands in the tree today**, re-verified in a browser on > 2026-08-25 — not as it was remembered. Where the current state differs from the record of > the original, the difference is called out rather than smoothed over. ## What was recovered vs. rebuilt Recovery used two sources that the wipe did not touch, in preference to rewriting anything: | Source | What it gave back | | --- | --- | | `~/.claude/file-history//` (pre-edit snapshots) | HR `nav-model.ts` (400 lines), `useApprovalCounts.ts`, HR `App.tsx`, `permissions.ts`, `AuthContext.tsx`, `RequireAuth.tsx`, both API bug fixes, the e2e Phase 0 matrix, the security write-up, the scoped seeder | | The session transcript `74e086a2….jsonl` (Write/Edit replay) | The whole `e2e-hr-finance/` Playwright suite — 8 files, replayed with no failed or ambiguous edits | Everything above is **byte-for-byte the original**, not a re-derivation. The following had no snapshot — they were last written on 2026-08-23, in a session whose transcript is absent — and were **rebuilt from their contracts** (the recovered `nav-model.ts` specifies the exact `SidebarItem` shape the sidebar must support, which made this far less speculative than it sounds): - `packages/ui-common/…/Sidebar.tsx` and `DashboardLayout.tsx` - both apps' `AppShell.tsx` and `CommandPalette.tsx` - `finance-web`'s `nav-model.ts` - the `@custom-variant dark` line in both apps' `index.css` - the HR dashboard's "Needs you today" panel and the Finance overview tiles **Not recovered, and not invented:** `docs/prompts/hr-finance-ui-redesign-prompt.md`, `docs/prompts/hr-finance-e2e-prompt.md`, and the original `hr-finance-nav-redesign-plan.md`. These were inputs, not outputs; writing plausible replacements would misrepresent what drove the work. They are simply gone. ## The shell as it now stands **Grouping.** Both apps group subject-first with a personal "My work" group on top. The test is "does this screen show only my own record?", mirroring `viewOwn` vs `viewAll`. - HR: 25 screens → **9 top-level rows** — Overview, My work, Approvals, People, Time & leave, Payroll, Talent, Reports, Settings. - Finance: 13 screens → **8 top-level rows** — Overview, Ledger, Revenue, Spend, Planning, Fixed assets, Reports, Setup. Nav gates mirror route gates. A group with no permitted child is not rendered at all, and a group holding exactly one permitted screen collapses to a flat row keeping the group's icon — confirmed live: `hr_manager` sees Payroll as a single "Payroll runs" row, not a group. **Group headers carry no `href`.** They render as `