opsz axis vacuous (no distinct opsz masters)
Audit code: opsz-without-cap-x-divergence
Definition
The opsz (optical size) axis is declared but no masters exist at distinct opsz values. Optical-size axes are designed to produce visible compensation: caption masters typically have larger x-height and thicker thinnest strokes than display masters. Without distinct masters at different opsz values, the axis interpolates between identical positions and produces no visible compensation — it's vacuous. Add at least one master at a different opsz value (a "caption" at 6pt or a "display" at 36pt is typical), or remove the axis.
How Patens surfaces this
The Patens audit module checks for opsz-without-cap-x-divergence 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 opsz-without-cap-x-divergence 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 38-source canonical library or read the research artifact.
- Size-specific Adjustments to Type Designs ↗
Tim Ahrens & Shoko Mugikura · 2007 · Just Another Foundry· Size-specific Adjustments to Type Designs
Ahrens & Mugikura's book-length English treatment of optical sizing: opsz axes that don't actually produce visible compensation are vacuous. Distinct masters at distinct opsz values are required.
- A Variable Fonts Primer ↗
variablefonts.io contributors · 2018 · variablefonts.io· Designing with variable fonts
Practitioner-side guidance on when opsz is worth declaring (only when the design actually compensates across the size range).
Related rules in Variable-font compatibility
master-axis-missingMaster missing axis valuemaster-axis-out-of-rangeMaster axis value out of rangemaster-axis-unknownMaster references unknown axismaster-contour-countMaster contour count mismatchmaster-point-countMaster point count mismatchstat-format-mismatchSTAT italic axis uses wrong formatstat-instance-name-mismatchSTAT composed name does not match fvar instancestat-missingSTAT table missing (familyAxes unset)