# tephpy documentation tooltips — design specification ```{readingtime} ``` > **Living document.** This specification is maintained alongside the code, not archived > behind it. The configuration and the gate it describes cite it by section — > `tooltip spec §3.3` and the like — so these sections *are* the reasoning behind what that > code does, and where the two ever diverge it is the specification that gets corrected. > Read it as current. - **Date:** 2026-09-01 (originated; maintained since) - **Status:** living design specification - **Citation prefix:** `tooltip spec §…` — the subject is the thing the reader hovers, not the library that draws it. `tippy spec` was rejected for naming a dependency this project does not control and may one day replace; the tooltips would survive that swap and the prefix should too - **Scope:** one third-party Sphinx extension, two vendored JavaScript bundles, a `conf.py` block, one gate with its pixi task and CI step, and one test module; no change to `src/tephpy/` - **Parent spec:** [`2026-08-03-published-specs-design.md`](2026-08-03-published-specs-design.md) — docs spec §3.1 is the layout that decides which pages exist, and docs spec §3.7 is the build-output gate this one is modelled on - **Sibling specs:** [`2026-08-20-examples-gallery-design.md`](2026-08-20-examples-gallery-design.md) — gallery spec §3.5 is why the thumbnails exist, and §3.4 below is what they already carry; and [`2026-08-31-reading-time-design.md`](2026-08-31-reading-time-design.md), the most recent documentation-surface feature, whose §5 records the same divergence problem this one meets - **Prior art:** GeoVista's `docs/src/conf.py`, which adopted `sphinx-tippy` first. §5 records what was taken, what was corrected, and what could not be carried across (tooltip-spec-1)= ## 1. Purpose tephpy's prose is written for scientific software engineers rather than meteorologists (spec §8.6), and it pays for that audience with jargon. The glossary is the instrument: 158 `:term:` references across the documentation (occurrences, not lines, counted over every tracked `.rst`/`.md` file under `docs/src` except the unpublished plans), 54 of them inside the glossary's own definitions. Every one of those is a link that costs the reader their place on the page — they follow it, read a sentence, and come back, or more often they do not follow it and carry the unfamiliar word forward. A tooltip removes that cost for the case where the reader wants a definition rather than a page. It is a presentation feature and this specification treats it as one: nothing here changes what the documentation says, only whether a reader has to leave a paragraph to understand it. That framing sets the bar for the gate in §3.6. Under the standing rule that this project gates the correctness of content rather than its presentation, a tooltip that renders badly is not a build failure. What §3.6 does check is the small set of properties whose regression would be silent and would reach the reader as something worse than no tooltip at all. (tooltip-spec-2)= ## 2. Decisions 1. **`sphinx-tippy`, from conda-forge, not from PyPI.** The extension reached conda-forge as `noarch/sphinx-tippy-0.4.3-pyhcf101f3_0.conda` on 2025-11-18, so it is declared in `[tool.pixi.feature.docs.dependencies]` beside the other Sphinx extensions rather than in the `pypi-dependencies` table where `playwright` sits. The prior art's comment describing it as "unavailable on conda-forge", and the `contextlib.suppress(ModuleNotFoundError)` guard that comment justifies, are both out of date and neither is carried across. 2. **The browser runtime is vendored and pinned, not fetched.** By default the extension emits `