# Shell Module — Codex (per FVW v8 §22)

**Module ID:** `oscar.shell`
**Per FVW v8 v0.10.0 §22:** C1-C9 contract items.
**Status:** Constitutional behaviour contract.

---

## C1 — Behaviour Inventory

### Files

| File | Purpose |
|---|---|
| `app/src/shell/OscarShell.tsx` | Top-level container |
| `app/src/shell/TopBar.tsx` | Logo + search + settings buttons |
| `app/src/shell/Dock.tsx` | Bottom 3-chip dock (Today, Projects, More) — v1.3.4 dropped the Tools chip; capture tools live in QuickPanel |
| `app/src/shell/QuickPanel.tsx` | Two-stage bottom sheet (narrow → wide with tabs) replacing the previous two-drawer pattern. FVW v8 sovereign, no Mantine. |

---

## C2 — State Machine with Transitions

States: (no FSM — always visible)

---

## C3 — Side Effect List

localStorage: route tracking (per react-router)

---

## C4 — Input Validation Contract

Per app/src/shell/ module-specific validation.

---

## C5 — Failure Modes

Per coverage-matrix.md.

---

## C6 — User Simulation List

5+ representative flows. See `pact/recipes/shell/coverage-matrix.md`.

---

## C7 — Reproducibility Test

Per module.

---

## C8 — Shape Matrix (per FVW v8 §30)

Per-surface × per-mode × per-chip × per-state.

| Surface | Modes | Chips | States |
|---|---|---|---|
| (per module) | |  | |
| Bottom dock (mobile) | (no FSM) | Today, Projects, More | active / inactive |
| QuickPanel — narrow | scrim, panel, handle, body | (date + user), bigCards×2, progressBar, quickRow×4 | opened / closed, dragging |
| QuickPanel — wide | scrim, panel, handle, body | (title + actions), tabs×3, grid (4 cols × 2 rows), footer | opened / closed, tab=work\|capture\|me, dragging |

---

## C9 — State Shape Inventory

### C9.1 localStorage

```
none
```

### C9.2 In-memory

Per module files.

### C9.3 IDB

none (shell is stateless chrome)

---

## END OF SHELL CODEX
