---
path: /nisaba/lexicon
surface: customer
domain: nisaba
auth: signed-in
source: apps/oshun/web/src/app/nisaba/lexicon/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; live
  screen-reader, touch, offline, and telemetry-delivery checks pending a manual
  AT pass. Evidence: WALKTHROUGH/results/runtime-sweep-2026-05-29.md; content
  re-verified 2026-06-03 against current source'
---

# Nisaba · the lexicon

## Purpose

Word study for one headword (fixture: ἡγεμονικόν). Surfaces morphology
(declension), etymology, glosses across the corpus, attestations, and semantic
field.

## Entry points

- **Nisaba sub-nav** — `LSubNav` entry "Lexicon" on [`nisaba.md`](./nisaba.md)
- **Daily passage** — "↗ lexicon" affordance on
  [`nisaba-daily.md`](./nisaba-daily.md)
- **Concept graph node** — [`nisaba-graph.md`](./nisaba-graph.md) concept nodes
  open lexicon entries (verify exact wiring)
- **Direct URL / bookmark** — yes

## Layout regions

`page.tsx` is a thin server component: `await getNisabaLexicon()` →
`<NisabaLexicon data={data} />`.

Inside `NisabaLexicon` (`nisaba.tsx`, line 1080):

- **Web shell top** — `LCustomerNav active="library"`
- **Header strip** — eyebrow row "Nisaba · the lexicon" / "Word study · Greek ·
  headword" / "← σχολή · ἡγεμονικόν · θεωρία →"
- **Hero word block** — large serif headword (size 84), transliteration
  ("hēgemonikón"), italic gloss ("n. · the ruling part, the governing faculty")
- **Three-column body** (`repeat(3, 1fr)`):
  - **I · Morphology — the word, declined.** — `case / singular / plural` table
    driven by `data.declension`
  - **II · …** — etymology / glosses across the corpus (verify in source)
  - **III · …** — attestations, semantic field (verify in source)
- **Footer / cross-references** — verify in source

## States

- [ ] **Loaded** — `getNisabaLexicon()` resolves before render
- [ ] **Headword switching** — eyebrow row hints at prev/next: "← σχολή ·
      ἡγεμονικόν · θεωρία →"; verify whether arrows are interactive
- [ ] **Declension table populated** —
      `data.declension.map(row =>     Fragment(row[0]))` renders one row per
      case
- [ ] **Empty column** — verify behavior when a section (etymology / glosses /
      attestations) is empty in the data
- [ ] **Reduced motion** — composes static Lilith primitives

## Interactions

### Header strip

- [ ] **← σχολή** (previous headword) — verify whether interactive in V1
- [ ] **θεωρία →** (next headword) — verify

### Hero word block

- [ ] **Headword glyph** — non-interactive serif display
- [ ] **Transliteration** — non-interactive accent italic

### Morphology table

- [ ] **Case label** (`case`) — non-interactive
- [ ] **Singular / plural form** — verify whether each form is clickable to see
      attestations
- [ ] **Row hover / focus** — verify any hover highlighting

### Other sections

- [ ] **Gloss row** — verify whether glosses link to passages
- [ ] **Attestation row** — verify whether each attestation opens its passage in
      the reading desk
- [ ] **Semantic-field card** — verify whether related words open their own
      lexicon entries

## Data & contracts

- **Reads**: `getNisabaLexicon()` from `@/lib/lilith-data/nisaba-depth` —
  returns `NisabaLexiconData` (verify shape: declension rows, etymology,
  glosses, attestations, semantic-field)
- **Writes**: _None._
- **Realtime**: _None._
- **Caching**: server fetch
- **Auth/role check**: shell middleware

## Cross-references

- Sibling Nisaba routes:
  - [`nisaba.md`](./nisaba.md), [`nisaba-compare.md`](./nisaba-compare.md),
    [`nisaba-daily.md`](./nisaba-daily.md),
    [`nisaba-graph.md`](./nisaba-graph.md),
    [`nisaba-manuscript.md`](./nisaba-manuscript.md),
    [`nisaba-notebook.md`](./nisaba-notebook.md),
    [`nisaba-plan.md`](./nisaba-plan.md),
    [`nisaba-scholar.md`](./nisaba-scholar.md)
- Component sources:
  - `apps/oshun/web/src/components/lilith/nisaba.tsx` (`NisabaLexicon`
    line 1080)
- Feature spec: [`V1/features.md#nisaba`](../../../V1/features.md#nisaba)

## Open questions / known gaps

- [ ] Confirm whether prev/next headword arrows in the eyebrow row are
      interactive in V1
- [ ] Document the cross-link contract — glosses, attestations, and semantic
      field destinations
- [ ] Verify reduced-motion handling for any hero animations
- [ ] Document the BFF endpoint that hydrates `NisabaLexiconData` once it
      replaces the local fixture
