# 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.