# Shell Module — Rules (per FVW v8 §11.9 — 9 Universal Things)

**Per FVW v8 v0.10.0 §11.9:** Every module's `rules.md` contains 9 universal workflow things.

---

## 1. Capability Declaration

### Reconstruction Mode Declaration (per §33)
- **Mode:** Sovereign SPA Mode (per DO-001)

### Capability statement
I CAN: [module-specific list — extracted from code]
I CANNOT: [module-specific gaps]
External validation required for: [module-specific]

---

## 2. Do-not-proceed rule

If any App-VP test fails, I MUST stop and write `blocker.md`. After 3 failed fix attempts, write `stuck.md`.

---

## 3. Contract primacy

Contract = recipe.md + codex.md. Scaffolding is NOT the contract.

---

## 4. Anti-drift enforcement (4 numbered checks)

1. Recipe → Source Check
2. Visual Diff Check
3. Behavioural Check
4. Contract Check

---

## 5. Plan-as-law

See `plan.md` for atomic steps.

---

## 6. Fallback behaviour

Module-specific. See codex.md C5.

---

## 7. User-simulator requirement

C6 user simulations per codex.md must be runnable.

---

## 8. Re-anchor cadence

Re-read contract at every phase boundary.

---

## 9. Coverage matrix

See `coverage-matrix.md`.

---

## Antipatterns — QuickPanel (v1.3.4)

Added when the two-drawer pattern was replaced with a single two-stage
panel. Violations are caught at code review; CI does not (yet) lint.

1. **No Mantine imports in QuickPanel.** The component is the first
   FVW v8 sovereign component in the shell — the rest of the shell
   still uses Mantine. Future shell migrations should follow this
   pattern (plain React + CSS custom properties).
2. **No FVS / `@fvs/*` imports anywhere in `app/src/shell/`.** Per
   the module's B.3 contract.
3. **No resurrecting the two-drawer pattern.** QuickPanel is the
   single panel. The legacy `<DrawerMenu variant="more">` +
   `<DrawerMenu variant="tools">` is removed from `Dock.tsx`;
   `DrawerMenu` is kept in `TopBar.tsx` for the hamburger only.
4. **No adding a "Tools" button back to the bottom dock.** Capture
   tools live in the QuickPanel's Capture tab. If a new capture
   tool is added, it goes in `TILES.capture` in `QuickPanel.tsx`,
   not in the bottom dock.
5. **No hardcoding tile data in Dock.tsx.** All tile data lives
   in `QuickPanel.tsx`'s `TILES` constant. The bottom dock is just
   route chips (Today, Projects, More).

---

## END OF RULES.MD
