---
path: /legal/lilith/privacy
surface: customer
domain: onboarding-public
auth: anon
source: apps/oshun/web/src/app/legal/lilith/privacy/page.tsx
status: walked
last_walked:
  '2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data
  (2xx), console/page-errors, expected content, screenshot verified; manual
  screen-reader and real telemetry-delivery checks pending. Evidence:
  WALKTHROUGH/results/runtime-sweep-2026-05-29.md; 2026-06-28 public-legal-pages
  Playwright pass covered anonymous routing, editorial heading/version/body
  contract, non-clickable footer markers, 390 px no-overflow, offline-after-load
  stability, no telemetry hooks, and axe. Manual AT pass and real telemetry
  delivery remain pending.'
---

# Legal · Lilith Privacy Policy (editorial variant)

## Purpose

Editorial-register privacy policy rendered through the same `LegalPage`
component as `/legal/lilith`, but with `kind="privacy"`. The composition swaps
the page title from `Terms of use.` to `Privacy policy.` while keeping the body
copy structure identical (five roman-numeralled briefs).

## Entry points

- Footer link on `/landing`
- Direct URL / bookmark — yes (anon)

## Layout regions

`page.tsx` is `<LegalPage kind="privacy" />`. The shared `LegalPage` composition
(in `apps/oshun/web/src/components/lilith/system-pages.tsx`) does NOT branch on
`kind` for body copy — only the heading text changes
(`kind === 'terms' ? 'Terms of use.' : 'Privacy policy.'`). The five briefs
below the title are the same Lilith terms body content as `/legal/lilith`.

- **Header (shell)**: `LWebShell` chrome
- **Page eyebrow**: "Lilith · legal"
- **Title**: `Privacy policy.` in 48px serif
- **Version code**: "Effective · 1 May 2026 · v.0142"
- **Double rule**
- **Body (max-width 62ch)**: same five briefs as `/legal/lilith`
  (`I · what this is`, `II · your account`, `III · what we keep, briefly`,
  `IV · AI · disclosed`, `V · ending the agreement`), including the `✻`
  disclosure glyph, `Settings · AI` reference, and "We do not sell anything."
- **Footer rule + link row**: same five non-clickable italic spans (Terms,
  Privacy, DPA, Sub-processors, DMCA)

## States

- [x] **Loading** — N/A; static
- [x] **Default** — title shows "Privacy policy." instead of "Terms of use.";
      body copy is unchanged from `/legal/lilith`
- [x] **Narrow viewport** — body reflows at 390 px without horizontal overflow
- [ ] **Print** — no print-specific stylesheet
- [x] **Offline after load** — once loaded, the URL, heading, and body contract
      remain stable when the browser context goes offline

## Interactions

### Footer link row

- [x] **"Terms" / "Privacy" / "DPA" / "Sub-processors" / "DMCA"** — same
      non-clickable `<span>` markers as `/legal/lilith`

### Body content

Inherits the same `✻` disclosure-glyph explanation, "Settings · AI" opt-out
reference, and "We do not sell anything." statement.

## Data & contracts

- **Reads**: none — static text
- **Writes**: none
- **Caching**: SSR static; loaded-route offline stability is asserted. Cold
  offline navigation / per-legal SW path caching is not asserted, and current
  `sw.js` does not path-cache `/legal/*`.
- **Auth**: anon (in middleware `PUBLIC_PREFIXES`)
- **Metadata**: `title: 'Lilith · privacy policy'`,
  `description: 'What we keep, what we do not. AI is disclosed; nothing is sold.'`

## Cross-references

- Sibling Lilith terms: [`legal-lilith.md`](./legal-lilith.md)
- Standard legal pages: [`legal-privacy.md`](./legal-privacy.md),
  [`legal-terms.md`](./legal-terms.md)
- Component sources:
  - `apps/oshun/web/src/components/lilith/system-pages.tsx` (`LegalPage`,
    parameterised by `kind`)

## E2E coverage

- Backed by
  [`apps/oshun/web/e2e/public-legal-pages.spec.ts`](../../../apps/oshun/web/e2e/public-legal-pages.spec.ts)
  — covers anonymous access, editorial heading/version/body contract, `✻`,
  `Settings · AI`, "We do not sell anything.", intentionally non-clickable
  footer markers, 390 px no-overflow, offline-after-load stability, no telemetry
  hooks, and axe.

## Open questions / known gaps

- [ ] Cold offline navigation / per-legal SW cache is not asserted and current
      `sw.js` does not path-cache `/legal/*`; PWA shell cache coverage remains
      in the offline-first / PWA walkthroughs.
- [ ] **Body copy is identical to `/legal/lilith`** — only the title changes via
      the `kind` prop. Confirm whether the privacy variant should have
      privacy-specific body content rather than reusing the terms briefs
- [ ] Footer link row is decorative spans, not anchors
- [x] Description meta says "nothing is sold" and the body now explicitly
      includes "We do not sell anything."
- [ ] No print stylesheet specific to this editorial variant
