# OPERATOR Sans + Mono · 0.004 Prototype

A Geist-derived family expansion preserving the approved OPERATOR rounded
u-shaped y and square left return, approved square-return g, selective j/t/l details, natural counters,
and the existing proportional Sans / 600-unit Mono relationship.

Each family includes Light 300, Regular 400, Medium 500, Semibold 600 and Bold
700, upright and italic: twenty static faces and four variable faces, each in
TTF and WOFF2. Variables expose only wght 300–700 with default 400. Authored
upstream italic bowls, stems, dots and spacing receive matching selective
returns; these are not mechanically slanted finished upright fonts.

## Attribution and source

Modified versions of Geist Sans 1.800 and Geist Mono 1.700. Copyright 2024 The
Geist Project Authors (https://github.com/vercel/geist-font). Modifications
copyright 2026 OPERATOR contributors. SIL Open Font License 1.1; the full OFL.txt
must accompany redistribution. Source commit:
10dc7658f13c38a474cde201bb09a4617267545b.

The upstream directory contains the four pinned editable .glyphspackage
sources, corresponding official variable references and named static drawing
references. inputs.json pins every input and the six approved OPERATOR upright
fixtures. The original prototype binaries, archives and builders are unchanged.

The source compiler interpolates compatible UFO masters at 300/400/500/600/700,
then compiles outlines, marks and kerning variation together. Approved 400/500/600
signature contours are imported through exact quadratic subdivision; Light/Bold
use their real static-weight geometry. Other glyphs remain authored source
outlines. Static releases are generated from the finished variables. Some
advances/coordinates have one-unit compiler rounding, within the documented
two-unit fidelity limit. No fake bolding or browser font synthesis is used.

Version 0.004 adopts the approved squared-descender g study. Its upper bowl and
counter stay authored; the flat foot aligns with y at -150. The exact approved
400/500/600 upright study recordings are pinned in fixtures/g-approved-study.json
and applied at the UFO master stage. Light and Bold use their real source-weight
geometry. The authored italics keep their own bowls and return direction:
Sans returns left, while Mono's cursive g returns right. Only the lower return
is squared in each italic's 12-degree slant frame. Accented g components and
the source-component gstroke inherit the change. Alternate g designs remain
unchanged. No other glyph design, advance or layout table is changed by 0.004.

Frozen 0.003 glyph/metric/layout fingerprints and the approved g recordings are
included in the source package and checksum-pinned. Regression checks compare
every non-g outline and bearing, every advance, GSUB/GPOS/GDEF, the inherited
g counter, authored-source fidelity and the six approved g-study boundaries.

Source-only non-export glyphs remain non-exported. The advertised repertoire is
exactly Sans 728 and Mono 889 mapped codepoints, with a 721-codepoint shared core.
coverage.json lists the exact scalars; this is not a claim of linguistic QA or
full Greek coverage. U+00AD SOFT HYPHEN is unmapped, as in the official fonts.

## Rebuild and verify

Python 3.12 and the exact packages in requirements.txt are required. Create a
local venv and install that lock; no build command installs anything globally.
HarfBuzz hb-shape is mandatory for verification. From the source package root:

    python build.py
    python verify.py

In this repository, outputs default to apps/docs/public/fonts/operator-family
and work reports to .release/type-family-build. When the source ZIP is extracted
elsewhere, outputs default to ./dist and ./build-work inside that extraction.
Explicit output locations are also supported:

    python build.py --output-dir /absolute/output --work-dir /absolute/work
    OPERATOR_FONT_OUTPUT=/absolute/output OPERATOR_FONT_WORK=/absolute/work python verify.py

Run `python verify.py --rebuild` to check deterministic font and package bytes.
The build needs no network once the included inputs and pinned tools are
present. The source ZIP includes editable upstream sources, outline code,
approved fixtures, reference fonts, lockfile, verification and all input hashes.

## Zero controls and widths

Defaults remain plain Sans zero and slashed Mono zero. Capital O is unmarked.
Use standard `zero=1` for slash. Dedicated `cv01` values are 1 plain, 2 slashed,
3 square-dot; off adds no override. Explicit cv01 runs after the standard zero
feature and inherited ss09. Figure widths run before zero selection. Each mode
retains both the selected advance and the base zero's kerning membership.

    font-variant-numeric: tabular-nums;
    font-feature-settings: "zero" 0, "cv01" 3;
    font-synthesis: none;

These controls affect full-size lining zero only; fraction, super/subscript and
numerator/denominator forms remain inherited. Sans supports proportional and
tabular figures. The square mark uses the real source square-dot dimensions
with an 80-unit optical minimum, keeping it visible without filling the counter.

Inherited ss09 also changes Sans numeral one, and makes Mono zero plain. It is
separate from the dedicated zero control. The source-package Mono had disabled
the default liga export found in its official binaries; this build explicitly
restores that pinned liga lookup. Consequently inherited default operator
ligatures such as -> can occupy a single 600-unit cell. Disable liga for literal
per-character alignment; inherited ss11 retains its own space-preserving
contextual-ligature behavior. These inherited options are not rewritten.

## Web use and installation

Use the supplied fonts.css, which defines Operator Sans Family and Operator
Mono Family aliases with explicit weight ranges and separate italic faces.
Desktop typographic families are OPERATOR Sans Prototype / OPERATOR Mono
Prototype. Legacy Regular/Italic/Bold/Bold Italic linking is preserved;
Light/Medium/Semibold receive distinct legacy families and matching italic mates.
The 600-weight legacy family suffix and STAT label use "Semi" to keep Windows
face-name combinations within 31 characters; typographic style and named
variable instance labels remain "Semibold". Variable default-instance names
match the font identity, and Roman STAT records link to the italic companion.

Install the static OR variable package, not both. They are alternatives with
separate PostScript identities. Remove historical OPERATOR Prototype fonts
before installing this candidate because desktop family names are retained.
No script installs fonts or changes application typography tokens globally.

## Evidence and qualification limits

Verification checks all 24 TTF/WOFF2 pairs, source hashes, identity, coverage,
static/variable parity, real weight samples and marks at 300/350/400/450/500/
550/600/650/700, approved contour fidelity and advances, thousands of actual
HarfBuzz zero/width/ss09 combinations, package contents and deterministic builds.
The coordinator's browser and rendered proof review are recorded separately.

For version 0.004, OpenType Sanitizer 9.2.0 accepted all 48 TTF/WOFF2 files with
no warnings or errors. The executable verifier additionally checks square-tail
geometry at every 50-unit axis sample, including both authored italics. The
complete current verification report is .release/type-family-build/verification.json;
the current OTS results are .release/type-family-build/g-v0.004-ots/results.json.
FontBakery has not been rerun for 0.004; the results below are historical only.

The September 23 qualification pass for **0.003** ran OpenType Sanitizer 9.2.0
on all 48 TTF/WOFF2 files. FontBakery 1.1.0 ran 83 selected
OpenType, metadata and basic rasterization checks across the 24 TTF faces:
1,208 PASS, 36 WARN, 504 SKIP and 24 INFO; no FAIL or ERROR.
The warnings are inherited long glyph names and Mono's hhea metric-storage
recommendation, both reproduced on the pinned upstream fonts. This was a
focused suite, not the complete Universal or Google Fonts publishing profile.
Byte-identical temporary copies used canonical style filenames because some
FontBakery checks infer style from filename casing.

That 0.003 pass corrected default-instance identity, STAT italic linking, long legacy
face-name combinations and seven one-unit composite bounding boxes. Regression
checks cover each correction. Every then-approved contour coordinate, advance,
coverage mapping, layout and variation table stayed unchanged, as did all
historical prototype assets.

New source builds are uniformly unhinted; no obsolete point instructions are
retained. Manual hinting and native Windows/Linux font-menu/raster validation
remain outstanding. This is a Prototype candidate, not a production-qualified
multilingual desktop release.

Typographic/hhea metrics remain ascent 1005, descent -295 and gap 0. Windows
clipping descent is 500 to cover the tested two-dot-below stack; metadata does
not guarantee safety in tightly clipped CSS controls or for unbounded stacking.
The fixed specimen must allow real mark extents. Inherited limitations include
Sans repeated acute marks occupying the same position, and unreviewed/unsupported
mark combinations such as y plus ogonek. These are shaping smoke tests, not
claims that arbitrary mark combinations are linguistically supported.

Sans revised-letter kerning remains source-derived and was visually reviewed
in the agreed interface corpus. Further reader studies, broad language review
and platform-specific small-size work remain future qualification. Light at
11px is a stress test; Regular/Medium are the initial interface proof weights.
