Descender is non-negative
Audit code: metrics-descender-nonnegative
Definition
Descender is zero or positive — descending letters (g, j, p, q, y) will sit on the baseline rather than dropping below it. Descender values are conventionally negative (e.g. -200 at 1000 UPM).
How Patens surfaces this
The Patens audit module checks for metrics-descender-nonnegative across five teaching surfaces: the edit-panel inline issue list, the
project-wide audit page, the release pre-flight check, the family hub,
and the home-page project tile. Every surface shows the same plain-English
explanation and links back to this page. This rule is detection-only — there's no automatic fix because the
correction is design-dependent (it requires a judgment call about the
glyph's intended shape or the font's intended behaviour). The audit
message links to the specific glyph or field that needs attention.
Run this check yourself
Patens runs every audit rule live as you draw — including this one.
The editor (in private alpha) shows metrics-descender-nonnegative firing on real
glyphs, or check your own work from the CLI:
npx patens audit your-project.font.jsonCanonical references
Primary literature where this rule is established or explained. Drawn from the open-licensed corpus — browse the full 42-source canonical library or read the research artifact.
- OpenType Specification 1.9.1 ↗
Microsoft Typography · 1997 · Microsoft Corporation· § OS/2 — sTypoDescender
sTypoDescender should be negative or zero (descenders sit below the baseline); positive values are nearly always errors.
Related rules in Vertical metrics
metrics-asc-mismatchOS/2 vs hhea ascender mismatchmetrics-cap-above-ascenderCap-height above ascendermetrics-desc-mismatchOS/2 vs hhea descender mismatchmetrics-gap-mismatchOS/2 vs hhea line-gap mismatchmetrics-use-typo-offUSE_TYPO_METRICS flag offmetrics-win-below-extrema-bottomOutline below winDescent (Windows clips it)metrics-win-below-extrema-topOutline tops winAscent (Windows clips it)metrics-win-clip-bottomwinDescent below typoDescender (bottom clip risk)metrics-win-clip-topwinAscent below typoAscender (top clip risk)metrics-x-above-capx-height above cap-heightmetrics-zero-heightCap or x-height is zero