# OPERATOR Sans + Mono Prototype · 0.002

Experimental, real Regular (400), Medium (500) and Semibold (600) companions for
an isolated dense-interface proof. Sans retains proportional advances; Mono
retains 600-unit Basic Latin advances. These are actual static weight sources,
not synthetic bold or scaled outlines. No italic or variable fonts are included.

Modified versions of Geist and Geist Mono 1.700. Original font copyright 2024
The Geist Project Authors (https://github.com/vercel/geist-font). Modifications
copyright 2026 OPERATOR contributors. Distributed under SIL Open Font License
1.1; the full OFL.txt must accompany redistribution. Space Mono informed the
original Mono design discussion; no Space Mono font data is included.

## Drawing

The y inherits its own weight's rounded u bowl, then joins an upright descender
and a square left return. Sans centers that unscaled bowl in the original y
advance. j and t receive square feet. Sans l receives a square foot; its ss03
straight-stem alternate was already square and is retained. Mono preserves its
wide baseline l serif and squares the top bar and l.ss03 return. Natural round
counters and unrelated shapes remain inherited.

Stroke dimensions come directly from each static source: Sans vertical stems
are 84/106/128 units and horizontals 74/87/99 units. Mono has 84/101/118–119-unit
stems and 74/85/96-unit horizontals. All fonts use a 1000-unit em. Source x-heights
and typographic line metrics are preserved. Sans Windows clipping descent is
extended from 262 to the actual new below-mark extent (291/296/302 units); this
avoids clipping without altering typographic or hhea line spacing. Detailed measurements and modified glyph
lists are recorded for each new font in provenance.json.

Copied t contours and transitive composite dependents follow the revised bases.
Changed glyphs and their dependent composites have stale instructions removed;
unrelated source hinting remains. Precomposed y-dot-below and matching GPOS
combining anchors are centered in the advance and lowered to clear the new
return. The square dot has a 45-unit gap; the round-dot alternate has at least
41 units. An additional below mark stacks beneath an existing dot.

## Identity and preservation

CSS families: Operator Sans Prototype and Operator Mono Prototype. Use explicit
400, 500 or 600 weights and font-synthesis: none. Modern font menus use shared
typographic families and Regular/Medium/Semibold styles. Legacy RIBBI menus use
separate Medium and Semibold families with a Regular subfamily, avoiding style
collisions. The source weight classes remain 400/500/600 and all fonts are upright.

The approved Mono 400 fonts, family identity, original build, original ZIP and
specimen remain byte-for-byte unchanged at version 0.001. Their hashes and
original provenance are embedded in the new family manifest. New fonts are
version 0.002. The companion build reads the original Mono 400 assets; it never
regenerates or overwrites them. To reproduce from sources, first generate that
original proof using its own pinned build, then run this build.

## Build and verification

From the repository root with Python 3.11+:

    .release/typeface-venv/bin/pip install -r typefaces/operator-sans/requirements.txt
    .release/typeface-venv/bin/python typefaces/operator-sans/build.py
    .release/typeface-venv/bin/python typefaces/operator-sans/verify.py

Source commit: https://github.com/vercel/geist-font/tree/10dc7658f13c38a474cde201bb09a4617267545b

Checked-in upstream static TTFs and OFL are pinned by SHA-256 in build.py.
The source is fonts/Geist/ttf for Sans and fonts/GeistMono/ttf for Mono. The
family ZIP includes six TTFs, six WOFF2s, the untouched Geist Sans Regular WOFF2
reference, full license, this README and provenance. Files, ZIP ordering and
ZIP timestamps are deterministic. TTF and WOFF2 outline/metric parity, preserved
advances, unchanged unrelated outlines, identity, marks, bounds, stale hints,
source hashes and complete package bytes are checked by verify.py.

A local review sheet can be produced with `python3
typefaces/operator-sans/render-review.py` when Pillow and HarfBuzz hb-view are available. It includes
11–14px labels, large signatures, accent forms and a Mono/Sans comparison.

## Prototype limits

The Latin interface samples and selected modified dependents are the reviewed
scope. The inherited Unicode coverage and OpenType features are not a claim of
comprehensive multilingual quality. Kerning stays inherited and needs a wider
spacing review after changing the y construction. New outlines are unhinted;
platform rendering, manual hinting and broad language/alternate coverage need
further testing. These static fonts are visual prototypes, not a production
release. The application retains its existing production typography outside
the isolated proof. No global installation is performed by these scripts.
