Context. surface customer · domain nisaba · route /nisaba/scholar · auth signed-in · source apps/oshun/web/src/app/nisaba/scholar/page.tsx
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
Purpose#
The text in full apparatus — variants, witnesses, marginalia, and cross-references. Fixture is Marcus Aurelius, Τὰ εἰς ἑαυτόν, IV.viii–xii, with 4 witnesses · 6 editions · 11 translations.
Entry points#
- Nisaba sub-nav —
LSubNaventry "Scholar mode" onnisaba.md - Compare view — link from
nisaba-compare.md"Apparatus · on" - Direct URL / bookmark — yes
Layout regions#
page.tsx is a thin server component: await getNisabaScholar() →
<NisabaScholar data={data} />.
Inside NisabaScholar (nisaba.tsx, line 177):
- Web shell top —
LCustomerNav active="library" - Header strip — eyebrow row "Nisaba · the desk · scholar mode" / "Marcus
Aurelius, Τὰ εἰς ἑαυτόν · IV.viii–xii" / "4 witnesses · 6 editions · 11
translations";
LDisplay(size 64) headline "The text, in full apparatus." - Toolbar (right of headline) — three actions:
Reader mode(ghost) — switch back to the reading-desk viewEdition: Farquharson 1944 ▾(ghost) — edition pickerCite(primary) — opens citation generator
- Three-column body (
gridTemplateColumns: '220px 1fr 320px'):- Left — Marginalia · your hand —
data.marginalia.map(m => (...))rows withL · <line>accent label and italic body; "Highlights" chip cloud below (power,quietness,impermanence,present moment,self,reason) - Centre — Text + apparatus — full apparatus rendering (verify exact
layout in
nisaba.tsxpast line 280) - Right column — witnesses / editions / translations rail (verify in source)
- Left — Marginalia · your hand —
Automation anchors#
- Root/header:
data-nisaba-scholar-pagewith marginalia/witness/ cross-reference/concept counts;data-nisaba-scholar-masthead-*,data-nisaba-scholar-heading, anddata-nisaba-scholar-toolbar - Toolbar: wrappers for
reader-mode,edition-picker, andcite(data-nisaba-scholar-toolbar-action) - Marginalia and highlights:
data-nisaba-scholar-marginaliawith per-row line and note cells;data-nisaba-scholar-highlightswith per-chip label - Text + apparatus:
data-nisaba-scholar-reading-column, perdata-nisaba-scholar-line-block,data-nisaba-scholar-crux, anddata-nisaba-scholar-apparatuswith per-entry line/lemma/variant cells - Witnesses/crossrefs/concepts:
data-nisaba-scholar-witness={siglum},data-nisaba-scholar-crossrefswith group/item cells, anddata-nisaba-scholar-conceptswith per-concept index
States#
- Loaded —
getNisabaScholar()resolves before render - Edition active — fixture: Farquharson 1944; verify whether the dropdown is interactive in V1
- Reader mode toggle —
Reader modebutton verifies whether it navigates back to/nisaba - Cite dialog — verify the Cite action target
- Marginalia present / empty —
data.marginaliamay be empty; verify in-rail empty state - Apparatus expanded — verify apparatus expansion controls
Interactions#
Header strip#
-
LDisplay— non-interactive
Toolbar#
- Reader mode (
LBtn kind="ghost")- Function: render-only V1 affordance; the journey verifies desk return via browser history
- Edition picker (
LBtn kind="ghost")- Function: render-only V1 affordance; exact options/dropdown remain unwired
- Cite (
LBtn kind="primary")- Function: render-only V1 affordance; citation generator remains unwired
Marginalia rail#
- Marginalia row — non-interactive specimen entry; verify whether the user can add new marginalia in V1
- Highlights chip cloud — visible chip cloud; chips are not wired to filter text/apparatus in this route
Text + apparatus column#
- Line / apparatus content — line blocks and apparatus entries render with stable line/lemma anchors
- Apparatus entry navigation — opens the witness in the manuscript view
(
/nisaba/manuscript) or compare view - Cross-reference link — opens the linked passage
Right column#
- Witness / cross-reference / concept rows — visible rows are asserted cell-by-cell
- Witness / edition / translation row navigation — opens the corresponding source
Data & contracts#
- Reads:
getNisabaScholar()from@/lib/lilith-data/nisaba-depth— returnsNisabaScholarData(marginalia: { ln, n }[], plus witnesses, editions, translations, apparatus — verify exact shape) - Writes: verify whether marginalia editing is wired in V1
- Realtime: None.
- Caching: server fetch
- Auth/role check: shell middleware
Cross-references#
- Sibling Nisaba routes:
- Component sources:
apps/oshun/web/src/components/lilith/nisaba.tsx(NisabaScholarline 177)
- Feature spec:
V1/features.md#nisaba
Open questions / known gaps#
- Confirm whether the Cite primary action exports BibTeX, formatted citation, or both
- Document the edition picker's options and the BFF backing them
- Confirm whether marginalia editing is in scope for V1 (the rail says "your hand" but the rendering is specimen-only)
- Verify the "Reader mode" button destination — current route exposes a
render-only button; the journey uses browser-back from
/nisaba/scholarto return to the desk