SEIHouse Sans 0.39 — Phase 4, step 3 FontBakery 1.1.0, all ten full OTF styles: Universal offline: 705 PASS, 0 FAIL, 0 WARN (427 SKIP, 30 INFO) OpenType: 287 PASS, 0 FAIL, 0 WARN (171 SKIP) Universal used --skip-network; online-only checks remain unverified. Neither completed profile contains ERROR or FATAL. Added 88 missing Vietnamese letters: 714 encoded codepoints / 732 glyphs. Full U+1EA0–1EF9 and Ơ/ơ/Ư/ư are covered, reusing existing circumflex, breve, horn, hook, tone and dot-below construction. Every added letter uses ACC with established fixed gaps and lighter tone strokes; no old recipe changed. Stacked ccmp composition handles NFC, NFD and structural-parent/tone input. New-only literal pair exceptions provide measured horn/tone clearance. verify_phase4.py against step 2: all 644 old outlines/advances and pair values are unchanged, including Cyrillic/Greek. All 33,300 language strings pass full/subset shaping, canonical equivalence, coverage, winding, collision and clipping checks. Final audit against the licensed 0.36 starting commit also passes: every one of its 419 glyphs, metrics, old pairs and established layouts is preserved through all three steps. Settings, weights, hint zones, numeric features and vertical metrics remain unchanged. The highest/lowest encoded Vietnamese ink fits 1.4em in every style: maximum combined extent 1.3798em. This does not certify device comfort. verify_phase4_engine.mjs: 19,860 existing SVG glyph cases match step 2 over five weights, both italics and three contrasts; new advances match their root letter. New tall NFC/NFD Lab SVGs allow overflow; old word geometry stays. Regular/Italic Vietnamese outline grids were inspected in individual cells. All ten full OTF/WOFF2 styles and seventy WOFF2 subsets rebuilt/autohinted. Legacy Latin extended and prior latin-ext-2/Cyrillic/Greek inventories stay intact; the Vietnamese face includes 442 characters and all mark ingredients. The Lab and the existing reference preview include the Vietnamese sample. Runtime ZIP/npm file allowlists, font hashes, CSS mappings and numeric features pass. Full WOFF2 family: 712,464 bytes; Regular/Italic: 141,632. Physical iPhone/Android/Windows/Mac browser and native-reader results remain unverified. FontBakery and outline proofs are engineering evidence only. Explicit Lab pair overrides follow the preserved default map. The optional --custom-spacing probe builds Regular with To=33: native kerning is 66 font units, every outline/advance is unchanged, and settings.json stays untouched. verify_license.py: all 90 full/subset fonts retain the licensed Sans name and legal records. Runtime npm 0.39.0 contains 17 files, zero dependencies/scripts; full, 400-only and subset ZIPs pass exact allowlists, hashes and CSS mappings. node --test tests/site.test.mjs: 10 passed. Website build: 37 public files. Previous release results follow. SEIHouse Sans 0.38 — Phase 4, step 2 FontBakery 1.1.0, all ten full OTF styles: Universal offline: 705 PASS, 0 FAIL, 0 WARN (427 SKIP, 30 INFO) OpenType: 287 PASS, 0 FAIL, 0 WARN (171 SKIP) Universal used --skip-network; online-only checks remain unverified. Neither completed profile contains ERROR or FATAL. Added 169 encoded Cyrillic/monotonic Greek characters: 626 codepoints / 644 glyphs. Russian and common Slavic U+0400–045F plus Ukrainian Ґ/ґ; modern Greek capitals, lowercase, final sigma, tonos, diaeresis, stacked dialytika/tonos and punctuation. Latin lookalikes reuse the existing drawings; italic б в г д и п т has cursive forms. Automatic pair measurement and new-script clearance preserve every old pair. Literal zero overrides cancel inherited class tightening; a regression detects their omission in the earlier export and passes in the corrected family. verify_phase4.py against step 1: all 475 old outlines/advances are identical; settings, weights, line metrics, hint zones, numeric features and prior shaping are unchanged. All 30,070 language strings pass NFC/NFD, no fallback, clipping, collision and full/subset shaping checks in all ten styles. Greek canonical punctuation matches semicolon/middle-dot shaping. All ten full OTF/WOFF2 styles and sixty subsets rebuilt and autohinted. Cyrillic/Greek deliveries include complete Latin words and combining accents. Full WOFF2 family: 658,048 bytes; Regular plus Italic: 130,052 bytes. All runtime ZIP and npm file allowlists, font hashes and CSS mappings pass. The Lab includes all new encoded glyphs and seven new script language samples. Pinned CLDR 48 scope is modern Slavic and monotonic Greek; polytonic Greek and historical Bulgarian yat/yus are excluded explicitly, not claimed as covered. Font/outline audits do not certify physical devices or native-reader comfort. Previous release results follow. SEIHouse Sans 0.37 — Phase 4, step 1 FontBakery 1.1.0, all ten full OTF styles: Universal offline: 705 PASS, 0 FAIL, 0 WARN (427 SKIP, 30 INFO) OpenType: 287 PASS, 0 FAIL, 0 WARN (171 SKIP) Universal used --skip-network; online-only checks remain unverified. Neither completed profile contains ERROR or FATAL. All ten full styles and forty WOFF2 subsets rebuilt and autohinted. Full Latin Extended-A: all 128 codepoints; 457 encoded characters / 475 glyphs. Added 55 letters and one light turned-comma mark (U+0312); all existing accents, carons, Turkish forms and Romanian local forms are unchanged. Newly added Latvian cedilla-named letters use comma forms; small g uses the turned comma above. New I/U ogonek classes have measured punctuation room. Added pinned CLDR 48 Slovak, Croatian and Slovenian inventories and samples. verify_phase4.py: 23,840 full-font language strings across all ten styles; exact preservation of all 419 prior outlines/advances, approved pair values, existing prose/local shaping, numeric features, vertical metrics and hint zones. Settings are unchanged; release metadata is recorded separately in phase4.json. New outlines have unambiguous winding; added glyphs and samples fit clipping bounds and tested neighbors do not intersect. Full/subset shaping matches. Legacy Latin extended retains its 298-character inventory; latin-ext-2 holds complete Latin text and accents. All forty unicode-ranges/face mappings pass. Numeric/fraction features continue to pass verify_phase2.py. Font and outline checks do not certify native-reader comfort or physical devices. Full WOFF2 family: 462,196 bytes; Regular plus Italic: 90,660 bytes. Licensing integration: all full/subset fonts retain SEIHouse Sans family names, legal name records, vendor ID and embedding permissions from licensed 0.36. Settings match licensed main exactly; SEIReader URLs/CSS remain supported. Previous release results follow. SEIHouse Sans 0.36 Phase 5 licensing and family-name health check Checked 3 October 2026 with FontBakery 1.1.0, all 10 full OTF files. Universal offline: 705 passed, 0 failed, 0 warnings (427 skipped, 30 info) OpenType checks: 287 passed, 0 failed, 0 warnings (171 skipped) Neither profile contains FAIL, WARN, ERROR or FATAL. Universal used --skip-network; online-only checks remain unverified. verify_license.py --baseline dist/phase5-baseline/fonts: All 50 current OTF/WOFF2/subset fonts contain name IDs 0/7/8/9/11/12/13/14, SEIHouse Sans names, Version 0.36, SEIH vendor ID and fsType 0. Installable document embedding is explicitly licensed. No vendor-ID or trademark registration is claimed. Ownership: SEIHouse Productions LLC, Ohio. Every glyph program, hint parameter/subroutine, metric, cmap and GPOS/GSUB/ GDEF table matches the saved 0.35 fonts. No spacing or outline change. The optional pre-rebuild baseline is an ignored local verification fixture. verify_phase2.py: all 10 styles and 30 subsets pass. verify_stroke_joins.py: all 10 styles pass; 18,290 language strings preserved. node --test tests/site.test.mjs: 10 tests passed. build_site.mjs: 37 public files; license and canonical stylesheet included. Chromium: all 10 styles load under each of SEIHouse Sans and SEIReader; license link returns HTTP 200 with the operative text; no page errors observed. Runtime delivery audits: full, 400-only and subset ZIPs pass exact file, stylesheet mapping, license bytes, font bytes and manifest hash checks. npm 0.36.0 payload: 17 files, zero dependencies and installation scripts. Full WOFF2 family: 431,780 bytes; Regular/Italic: 85,008; subsets: 638,180. Canonical CSS family: SEIHouse Sans. SEIReader CSS alias, asset filenames, @seihouse/seireader and its styles.css export remain supported. License: SEIHouse Sans Ecosystem License 1.0. Creative use/customization and document embedding are permitted; unrelated product embedding and standalone font redistribution require written permission. Separate Display, third-party materials and archived earlier releases retain their existing notices. Previous release checks follow. SEIReader 0.35 stroke-join repair health check Checked with FontBakery 1.1.0, all 10 full OTF files. Universal offline: 705 passed, 0 failed, 0 warnings (427 skipped, 30 info) OpenType checks: 287 passed, 0 failed, 0 warnings (171 did not apply) Universal used --skip-network. Online-only checks remain unverified. Neither completed profile contains FAIL, WARN, ERROR or FATAL results. All ten full OTF/WOFF2 styles and thirty web subsets rebuilt and autohinted. Self-overlapping strokes are simplified with corrected winding before export. Chromium no longer shows missing patches at the v/V/w/W or 2/3/4/5 joins. verify_stroke_joins.py passes: - Every full/subset glyph agrees under nonzero and even/odd fill rules. - All 80 reported glyph/style cases reproduce the defect in archived 0.34 and render with unambiguous solid contours in 0.35. - Settings, horizontal metrics, kerning JSON and GPOS/GSUB/GDEF tables are unchanged; silhouettes stay within subpixel curve-fitting tolerances. - All 18,290 language strings preserve positions, NFC/NFD behavior and subset shaping. Existing tnum/sups/subs/frac layouts and line metrics are preserved. - Phase 2 features, centering and all thirty subsets pass verify_phase2.py. - Three runtime ZIP choices pass exact file-scope, hashes and CSS/font audits. Chromium before/after Day/Night proofs cover all ten styles at 13/15/17/20/68px. The Regular screenshots are in docs/proofs/0.35/; these are isolated desktop browser checks, not physical iPhone or sustained-reading certification. Original drawing rules and all Display assets remain unchanged. FontBakery alone did not identify the original fill-rule ambiguity. The new saved-CFF outline audit directly checks that failure, including numeric alternates, combining marks and symbols. Previous release: 0.34 (historical results below) SEIReader 0.34 health check Checked with FontBakery 1.1.0, all 10 full OTF files. Universal offline: 705 passed, 0 failed, 0 warnings (427 skipped, 30 info) OpenType checks: 287 passed, 0 failed, 0 warnings (171 did not apply) Universal was run with --skip-network. Online-only checks remain unverified. No online-only pass is claimed for 0.34. There are no FAIL, WARN, ERROR, or FATAL results in either completed profile. All ten styles and thirty WOFF2 subsets rebuilt and autohinted. Phase 2 shaping and all thirty subset ranges pass verify_phase2.py. verify_languages.py passes in all ten styles: - Every old cmap entry, all 323 contours and horizontal metrics, old nonnumeric per-style pair values, settings except version, vertical metrics, and hint values match 0.33. - Existing prose and numeric features shape identically except approved numeric period/comma spacing when kerning is on; joins and kerning-off layouts are preserved. - Added 94 encoded letters and two unencoded alternates: 401 codepoints / 419 glyphs. - The pinned CLDR 48 main/auxiliary/index alphabets, casing, NFC/NFD forms, and samples pass for Polish, Czech, Hungarian, Romanian, Turkish, Hausa (Latin), Kurdish (Kurmanji, Latin), Maori, Igbo, and Uzbek (Latin): 18,290 full-font language strings. - All 17 combining marks have zero advances and GDEF mark classification. - All new canonically composed letters match their decomposed spellings. Tested Igbo tone stacks remove the i dot and retain dot-below; mark advances/classes stay correct. - Turkish fi retains its dot through locl; default fi and all fl joins are preserved. Romanian legacy cedillas display as comma forms only for Romanian. Hungarian-only uppercase TT/TY clearance preserves the default capital spacing. - User-reported decimal crowding is corrected with 24 source units on each side of numeric periods and commas. All 40 separator pairs per style replace automatic tightening; tabular forms share equal adjustments for stable formatted columns. verify_decimals.py checks actual separator-band ink clearance (at least 0.07 em), both figure modes, prices/percentages/decimal-comma samples, unchanged numeric outlines/metrics and digit-to-digit rhythm, and matching basic/extended subsets. Before/after native Windows Day/Night proofs were inspected at 13/15/17/20px, including all ten styles. FontBakery profiles were rerun after this correction. The optional --overrides regression builds custom and default scratch fonts: proportional and tabular margins follow pairSpace, tabular columns stay aligned, and the default GPOS/GSUB/GDEF/hmtx tables match the shipped Regular exactly. - New letters beside selected prose/punctuation neighbors, locale samples, exemplar sequences, and tone stacks have no contour intersections or clipping. - Latin extended includes all 95 Latin-basic codepoints, complete tested Latin clusters, prose punctuation, and middle dot: 298 codepoints. Symbols/icons retains 104, including the same middle dot. All 18,290 strings shape identically in Latin extended and full. All thirty subset ranges and CSS weight/style/precedence checks pass. Preserved ten 0.33 full WOFF2 fonts and thirty subsets match SHA-256 manifests and the original bytes at commit 922147b. Historical verify_latin.py old/0.33 passes its foundation scope audit against preserved 0.32. The same four-card reference preview embeds 24 real font faces. Its script syntax, comparison controls, 18 fixed small-text samples, per-style Lab pair lookup, and embedded font bytes were checked locally. Its ten-language selector sets the text language; new rows cover NFC/NFD, casing, local forms, and real italics. Independent Lab checks compare 2,010 word widths with HarfBuzz. New accent drawings survive a warmed base-letter contrast cache; the cache fix affects live SVG display, not the generated font outlines. Native Windows WPF grayscale Day/Night proofs at 96 dpi were inspected at 13/15/17px Light/Regular/Medium and at 20px across all five weights, upright and italic; see docs/proofs/0.34/ and family/. Proofs use positive-up vertical offsets and enough row height for accent lines, with 1.5 leading and at least 21px baseline separation. Each row includes all ten distinct language tags. Mixed Polish/Czech, Hungarian/Maori, and Uzbek/Kurdish lines were separated before the final proof render. These use HarfBuzz positions and real outlines, without installed fonts or synthetic styles. Baseline 0.33 lacks new encoded letters, shown as boxes in WPF or browser fallback. Browser automation could not connect; browser/device and sustained-reading comfort checks remain deferred at the user's request. No physical phone/browser pass is claimed. This is multilingual Phase 2's first ten alphabet inventories. Alphabet/shaping coverage is separate from native-reader certification. Additional spelling traditions and missing codepoints outside this inventory can still use fallback. Remaining Latin alphabets and other scripts require later work; see docs/LANGUAGES-0.34.md. Subsets are generated to fresh sibling files, validated, and replaced atomically after intermittent direct writes to existing WOFF2 files failed. The final thirty-file run passes. Arbitrary stacks can exceed fixed clipping bounds; check 1.4/1.5 line clearance in real text. App distribution follow-up (font bytes unchanged): - Full family: 444,456 font bytes / 10 WOFF2 files, 31.3% less than all thirty subsets (646,568 font bytes). Regular plus real italic is 86,932 font bytes. - Standard-library packaging writes runtime-only full/subset/selected-weight ZIPs, relative CSS, integrity hashes, and install guidance. Exact shipped-file scope, hashes, source bytes, weight/style mappings, and subset priority all pass. - The actual private npm tarball contains 15 files, no dependencies or install scripts. Its styles.css export resolves in a fresh installation and Development's Vite 8.1.5 consumer build; all ten emitted font assets match their source bytes and CSS URLs. - Sources, OTFs, old fonts, Lab, proofs, reference fonts, and tooling remain outside the runtime package. Generated archives/caches are ignored by Git. Actions builds the installable ZIP/tarball without installing any font-building dependencies. - Development/NovelExpanded source was inspected, not modified. Its current Windows check:app fails on InlineAudio.tsx / inlineAudio.ts case-insensitive resolution; this is a separate existing app issue, not a font-package validation pass. The handoff targets the actual HARNESS chapter prose and preserves the host/SEN boundary. History 0.19 First check found and fixed: version number mismatch, missing "normal style" flag on Light/Medium/SemiBold, empty language/region info, missing style table (STAT), old Mac-only name entries, unequal math sign widths. 0.20 Still clean after adding 30 more symbols. Build now merges shapes one at a time (the old batch merge could leave simple filled shapes hollow). 0.21 Still clean after adding the Ⓢ brand mark, music marks, player controls and 11 icons (with private in-app codes U+E000-E00F). 0.22 Still clean with thick and thin (horizontal strokes 12% thinner). Carved joins were tried and switched off: they showed as dents when zoomed in. 0.23 Still clean after adding Western European languages (70 accented and special letters). 0.24 Still clean with tall lowercase letters (l b d h k f) set to exactly capital height. 0.25 Phase 1: Light 70, automatic pair spacing (about 1,800 pairs per style: capitals, punctuation, quotes, brackets), joined fi / fl with cursor positions, and screen tuning (alignment zones + Adobe otfautohint). Still clean. 0.26 Phase 2: tabular figures, superscript/subscript figures, fractions, and three WOFF2 Unicode subsets per style. All 10 full OTF styles still have 0 FAIL / 0 WARN in both profiles. Shaping and all 30 web subsets also verified. 0.27 Rounder upright forms, gentler lowercase pair spacing, raised quotes and tighter apostrophes; all 10 full styles and 30 subsets rebuilt. OpenType and offline universal profiles are clean. Online-only universal checks remain unverified. 0.28 Individual a/e/c/s curves, modest a/e width reductions, slightly wider i side space, and 0.220 em word space; recalculated pair spacing, rebuilt all 10 styles and 30 subsets. OpenType and offline universal are clean. Preserved 0.27 and bundled licensed Literata/Rubik references in the self-contained comparison preview. 0.29 Consistent h/n/m shoulders, u lower curve, and b/d/p/q bowls. All advances and global settings match 0.28; only the eight selected letters and five accented derivatives have new outlines. Rebuilt all 10 styles and 30 subsets. OpenType and offline universal are clean. Preserved all ten 0.28 styles and updated the same reference preview. 0.30 Measured optical spacing for reported reading words/pairs and ligature neighbors, separately by weight and italic. All contours/metrics match 0.29. Rebuilt all ten styles and 30 subsets; scope/shaping/collision audits and both FontBakery profiles are clean. Preserved 0.29 and added fixed-size comparison/native Windows proofs. 0.31 Broader rhythm inspection for minimum, murmur, river, climate, parallel, everywhere, and supporting r/v/w/y/narrow-letter cases. Balanced ll, protected yw/tw separation, and opened crowded italic ur/um. Preserved all 0.30 contours, metrics, settings, earlier focused pairs, and ligature neighbors. All ten styles and thirty subsets rebuilt; preservation, permitted-pair, shaping, collision, and FontBakery checks pass. Updated the same preview and native Day/Night proofs, including all weights at 20px. 0.32 Quieter punctuation, smoother numeral bowls/terminals, and reading-weight calibration together. Light letters draw at 74 and Medium at 97 source units, with all nominal controls, advances, letter pairs, vertical metrics, and unrelated drawings preserved. Updated numeric alternates/fractions and full-height mark/figure clearance, including accents. Ten full styles/thirty subsets rebuilt and autohinted. Texture, counter, weight, shaping, collision, delivery, and both FontBakery profiles pass. Preserved 0.31 full/subset fonts and updated the same comparison and Windows Day/Night proofs. 0.33 Additive Latin foundation: seventeen combining accents, canonical composition, base/ligature/mark attachment, independent above/below stacks, and dotless i/j. Low/reversed quotes, lexical apostrophes, dotted circle, thin/narrow spaces added. All 295 old outlines/metrics, pairs, settings, vertical metrics, and hint values match 0.32. Ten full styles/thirty subsets rebuilt. Latin extended overlaps basic and prose punctuation so clusters shape in one face. Preservation, shaping, contour collision, delivery, historical texture, and both FontBakery profiles pass. Same preview/Lab updated; corrected native mark offset direction and row layout. 0.34 First Latin language batch: 94 encoded letters for ten locales, Czech side carons, barred/hooked forms, Igbo dot-below tone stacks, Turkish/Romanian localized forms, and Hungarian-only capital spacing. All 323 old contours/metrics, default pairs, settings, vertical metrics, and hint values match 0.33. Ten full styles/thirty subsets rebuilt. All 18,290 language strings, canonical/local shaping, contour clearance, preservation, delivery, and both FontBakery profiles pass. Same preview gains a language selector; Lab includes new alphabets and cache-safe accent drawings. Native Windows Day/Night proofs inspected. Actual browser/device checks remain open.