From 0393682313ed5226702c619e865b68ae69ebb2a7 Mon Sep 17 00:00:00 2001 From: Ryan Dombrowski Date: Wed, 12 Aug 2026 14:04:40 -0400 Subject: [PATCH] fix(build): vendor the AF type set and self-host it, so a CDN cannot fail the build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit apps/web and apps/composer declared their type with next/font/google. Next self-hosts the result, so no visitor ever hit Google — but the BUILD fetched every face from fonts.gstatic.com, which made a third-party CDN a hard dependency of compiling this product. It failed roughly three of eight CI runs in a day, blocking merges and deploys: [Error: Failed to fetch font file from `https://fonts.gstatic.com/...woff2`.] An error occurred in `next/font`. > Build failed because of webpack errors Both apps now declare the same faces with next/font/local against committed .woff2 files in packages/fonts. No build touches the network for type. The vendored bytes are not a fresh download: they are the exact files next/font/google was already emitting for this repo, lifted from a build on main, so "no visual change" holds by construction rather than by inspection. Proof, main vs this branch on apps/web: the six emitted faces are byte-identical by sha256, the set is unchanged, all 137 text elements keep their size, position and weight, and the full-page screenshots are byte-identical PNGs — 0 of 2,423,040 pixels differ. Getting that last 0 needed the fallbacks pinned. next/font/google reads its metric-matched fallback from a per-family metrics database; next/font/local recomputes it from the file you hand it, and ours are the latin subset, whose OS/2 xAvgCharWidth differs. Left alone it moved IBM Plex Mono's size-adjust from 134.59% to 131.49% and visibly narrowed every character the subset does not carry — 2,689 pixels' worth of shifted arrow glyphs. packages/fonts/fallbacks.css pins all four faces at the values main emitted, with adjustFontFallback: false. Subset is latin, matching the subsets: ["latin"] both apps always declared. next/font/google emits every subset Google returns and preloads only the declared one, so main shipped 29 files where 6 were ever preloaded. Dropping the other 23 was checked, not assumed: a scan of apps/, packages/, e2e/, acceptance/ and the demo project found zero codepoints in the latin-ext, Greek, Cyrillic or Vietnamese ranges. All four families are OFL-1.1, and each vendored binary says so itself in its licenseURL name record. OFL.txt carries the license and every family's copyright notice as clause 2 requires. catalog.json pins each file by sha256 and verify.mjs re-checks them offline as the package's test script, so pnpm test covers the bytes. Exported names and CSS variable names are unchanged, so no consumer CSS moves. Co-Authored-By: Claude Fable 5 --- apps/composer/app/fonts.ts | 64 +++++++--- apps/web/app/fonts.ts | 64 +++++++--- packages/fonts/OFL.txt | 113 ++++++++++++++++++ packages/fonts/README.md | 112 +++++++++++++++++ packages/fonts/catalog.json | 99 +++++++++++++++ packages/fonts/fallbacks.css | 62 ++++++++++ .../fonts/files/ibm-plex-mono-400-latin.woff2 | Bin 0 -> 10052 bytes .../fonts/files/ibm-plex-mono-500-latin.woff2 | Bin 0 -> 10060 bytes .../fonts/files/ibm-plex-mono-600-latin.woff2 | Bin 0 -> 10120 bytes .../files/ibm-plex-sans-variable-latin.woff2 | Bin 0 -> 40240 bytes packages/fonts/files/jost-400-latin.woff2 | Bin 0 -> 9404 bytes packages/fonts/files/oswald-600-latin.woff2 | Bin 0 -> 12776 bytes packages/fonts/package.json | 10 ++ packages/fonts/verify.mjs | 51 ++++++++ pnpm-lock.yaml | 2 + 15 files changed, 545 insertions(+), 32 deletions(-) create mode 100644 packages/fonts/OFL.txt create mode 100644 packages/fonts/README.md create mode 100644 packages/fonts/catalog.json create mode 100644 packages/fonts/fallbacks.css create mode 100644 packages/fonts/files/ibm-plex-mono-400-latin.woff2 create mode 100644 packages/fonts/files/ibm-plex-mono-500-latin.woff2 create mode 100644 packages/fonts/files/ibm-plex-mono-600-latin.woff2 create mode 100644 packages/fonts/files/ibm-plex-sans-variable-latin.woff2 create mode 100644 packages/fonts/files/jost-400-latin.woff2 create mode 100644 packages/fonts/files/oswald-600-latin.woff2 create mode 100644 packages/fonts/package.json create mode 100644 packages/fonts/verify.mjs diff --git a/apps/composer/app/fonts.ts b/apps/composer/app/fonts.ts index 524a79c..eabfc7b 100644 --- a/apps/composer/app/fonts.ts +++ b/apps/composer/app/fonts.ts @@ -1,38 +1,70 @@ /** * The Aesthetic Function type set (matches af-site/assets/af.css): Oswald * for headlines, IBM Plex Sans for body, IBM Plex Mono for labels and - * buttons, Jost for the wordmark. next/font downloads at build time and - * self-hosts under _next/static/media — no runtime request to Google, so - * the production smoke suite's clean-network check is unaffected. + * buttons, Jost for the wordmark. + * + * These were `next/font/google` declarations. Next self-hosted the result, so + * nothing was fetched at runtime — but the BUILD downloaded every face from + * fonts.gstatic.com, so a CDN hiccup failed the build outright and blocked + * merges and deploys. The faces now come from committed .woff2 files in + * packages/fonts, which no build has to go to the network for. + * + * The files there are the exact bytes Google was already serving this repo, and + * the descriptors below reproduce the @font-face rules those declarations + * generated — same weights, same styles, same font-display, same CSS variable + * names. See packages/fonts/README.md for provenance, subset and licensing. + * + * `adjustFontFallback: false` + an explicit `fallback` is not a change of + * fallback, it is what keeps the fallback the same: next/font/local would + * recompute the metric-matched face from our subset files and land on slightly + * different numbers. packages/fonts/fallbacks.css pins the faces at the values + * next/font/google emitted, and is imported here so the declarations and the + * faces they name travel together. */ -import { IBM_Plex_Mono, IBM_Plex_Sans, Jost, Oswald } from "next/font/google"; +import localFont from "next/font/local"; -export const oswald = Oswald({ - subsets: ["latin"], - weight: ["600"], +import "../../../packages/fonts/fallbacks.css"; + +export const oswald = localFont({ + src: [{ path: "../../../packages/fonts/files/oswald-600-latin.woff2", weight: "600", style: "normal" }], variable: "--font-oswald", display: "swap", + adjustFontFallback: false, + fallback: ["Oswald Fallback"], }); -export const plexSans = IBM_Plex_Sans({ - subsets: ["latin"], - weight: ["400", "500", "600"], +// One variable file (wght 100..700) serves all three weights, exactly as the +// single file Google served for all three did. +export const plexSans = localFont({ + src: [ + { path: "../../../packages/fonts/files/ibm-plex-sans-variable-latin.woff2", weight: "400", style: "normal" }, + { path: "../../../packages/fonts/files/ibm-plex-sans-variable-latin.woff2", weight: "500", style: "normal" }, + { path: "../../../packages/fonts/files/ibm-plex-sans-variable-latin.woff2", weight: "600", style: "normal" }, + ], variable: "--font-plex-sans", display: "swap", + adjustFontFallback: false, + fallback: ["IBM Plex Sans Fallback"], }); -export const plexMono = IBM_Plex_Mono({ - subsets: ["latin"], - weight: ["400", "500", "600"], +export const plexMono = localFont({ + src: [ + { path: "../../../packages/fonts/files/ibm-plex-mono-400-latin.woff2", weight: "400", style: "normal" }, + { path: "../../../packages/fonts/files/ibm-plex-mono-500-latin.woff2", weight: "500", style: "normal" }, + { path: "../../../packages/fonts/files/ibm-plex-mono-600-latin.woff2", weight: "600", style: "normal" }, + ], variable: "--font-plex-mono", display: "swap", + adjustFontFallback: false, + fallback: ["IBM Plex Mono Fallback"], }); -export const jost = Jost({ - subsets: ["latin"], - weight: ["400"], +export const jost = localFont({ + src: [{ path: "../../../packages/fonts/files/jost-400-latin.woff2", weight: "400", style: "normal" }], variable: "--font-jost", display: "swap", + adjustFontFallback: false, + fallback: ["Jost Fallback"], }); export const fontVariables = [ diff --git a/apps/web/app/fonts.ts b/apps/web/app/fonts.ts index 524a79c..eabfc7b 100644 --- a/apps/web/app/fonts.ts +++ b/apps/web/app/fonts.ts @@ -1,38 +1,70 @@ /** * The Aesthetic Function type set (matches af-site/assets/af.css): Oswald * for headlines, IBM Plex Sans for body, IBM Plex Mono for labels and - * buttons, Jost for the wordmark. next/font downloads at build time and - * self-hosts under _next/static/media — no runtime request to Google, so - * the production smoke suite's clean-network check is unaffected. + * buttons, Jost for the wordmark. + * + * These were `next/font/google` declarations. Next self-hosted the result, so + * nothing was fetched at runtime — but the BUILD downloaded every face from + * fonts.gstatic.com, so a CDN hiccup failed the build outright and blocked + * merges and deploys. The faces now come from committed .woff2 files in + * packages/fonts, which no build has to go to the network for. + * + * The files there are the exact bytes Google was already serving this repo, and + * the descriptors below reproduce the @font-face rules those declarations + * generated — same weights, same styles, same font-display, same CSS variable + * names. See packages/fonts/README.md for provenance, subset and licensing. + * + * `adjustFontFallback: false` + an explicit `fallback` is not a change of + * fallback, it is what keeps the fallback the same: next/font/local would + * recompute the metric-matched face from our subset files and land on slightly + * different numbers. packages/fonts/fallbacks.css pins the faces at the values + * next/font/google emitted, and is imported here so the declarations and the + * faces they name travel together. */ -import { IBM_Plex_Mono, IBM_Plex_Sans, Jost, Oswald } from "next/font/google"; +import localFont from "next/font/local"; -export const oswald = Oswald({ - subsets: ["latin"], - weight: ["600"], +import "../../../packages/fonts/fallbacks.css"; + +export const oswald = localFont({ + src: [{ path: "../../../packages/fonts/files/oswald-600-latin.woff2", weight: "600", style: "normal" }], variable: "--font-oswald", display: "swap", + adjustFontFallback: false, + fallback: ["Oswald Fallback"], }); -export const plexSans = IBM_Plex_Sans({ - subsets: ["latin"], - weight: ["400", "500", "600"], +// One variable file (wght 100..700) serves all three weights, exactly as the +// single file Google served for all three did. +export const plexSans = localFont({ + src: [ + { path: "../../../packages/fonts/files/ibm-plex-sans-variable-latin.woff2", weight: "400", style: "normal" }, + { path: "../../../packages/fonts/files/ibm-plex-sans-variable-latin.woff2", weight: "500", style: "normal" }, + { path: "../../../packages/fonts/files/ibm-plex-sans-variable-latin.woff2", weight: "600", style: "normal" }, + ], variable: "--font-plex-sans", display: "swap", + adjustFontFallback: false, + fallback: ["IBM Plex Sans Fallback"], }); -export const plexMono = IBM_Plex_Mono({ - subsets: ["latin"], - weight: ["400", "500", "600"], +export const plexMono = localFont({ + src: [ + { path: "../../../packages/fonts/files/ibm-plex-mono-400-latin.woff2", weight: "400", style: "normal" }, + { path: "../../../packages/fonts/files/ibm-plex-mono-500-latin.woff2", weight: "500", style: "normal" }, + { path: "../../../packages/fonts/files/ibm-plex-mono-600-latin.woff2", weight: "600", style: "normal" }, + ], variable: "--font-plex-mono", display: "swap", + adjustFontFallback: false, + fallback: ["IBM Plex Mono Fallback"], }); -export const jost = Jost({ - subsets: ["latin"], - weight: ["400"], +export const jost = localFont({ + src: [{ path: "../../../packages/fonts/files/jost-400-latin.woff2", weight: "400", style: "normal" }], variable: "--font-jost", display: "swap", + adjustFontFallback: false, + fallback: ["Jost Fallback"], }); export const fontVariables = [ diff --git a/packages/fonts/OFL.txt b/packages/fonts/OFL.txt new file mode 100644 index 0000000..34d74a5 --- /dev/null +++ b/packages/fonts/OFL.txt @@ -0,0 +1,113 @@ +The four families vendored in ./files are each licensed under the SIL Open +Font License, Version 1.1. Every one of them declares that license in its own +`licenseURL` name record (http[s]://scripts.sil.org/OFL) — see ./README.md for +how to re-read that from the binaries. Their copyright notices, taken verbatim +from the `copyright` name record of the vendored files: + + Oswald + Copyright 2016 The Oswald Project Authors + (https://github.com/googlefonts/OswaldFont) + + IBM Plex Sans + Copyright 2019 IBM Corp. All rights reserved. + with Reserved Font Name "Plex" + + IBM Plex Mono + Copyright 2017 IBM Corp. All rights reserved. + with Reserved Font Name "Plex" + + Jost + Copyright 2020 The Jost Project Authors + (https://github.com/indestructible-type/Jost) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://scripts.sil.org/OFL + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/packages/fonts/README.md b/packages/fonts/README.md new file mode 100644 index 0000000..74da932 --- /dev/null +++ b/packages/fonts/README.md @@ -0,0 +1,112 @@ +# @dspack-studio/fonts + +The Aesthetic Function type set, committed as `.woff2` files. + +## Why this package exists + +`apps/web` and `apps/composer` used to declare their type with `next/font/google`. +Next self-hosts the result, so nothing was fetched at *runtime* — but the **build** +downloaded every face from `fonts.gstatic.com`, which made every build, every CI +run and every deploy depend on a third-party CDN being up. When it hiccuped the +build did not degrade, it failed: + +``` +[Error: Failed to fetch font file from `https://fonts.gstatic.com/s/ibmplexsans/...woff2`.] +An error occurred in `next/font`. +> Build failed because of webpack errors +``` + +Both apps now declare the same faces with `next/font/local`, pointed at the files +in `./files`. The bytes are in git, so a build needs no network for type at all. + +## What is here + +Six faces, 90.5 KB total, `latin` subset: + +| File | Family | Weights | Bytes | +| --- | --- | ---: | ---: | +| `oswald-600-latin.woff2` | Oswald 4.103 | 600 | 12,776 | +| `ibm-plex-sans-variable-latin.woff2` | IBM Plex Sans 3.201 | 400 / 500 / 600 | 40,240 | +| `ibm-plex-mono-400-latin.woff2` | IBM Plex Mono 2.3 | 400 | 10,052 | +| `ibm-plex-mono-500-latin.woff2` | IBM Plex Mono 2.3 | 500 | 10,060 | +| `ibm-plex-mono-600-latin.woff2` | IBM Plex Mono 2.3 | 600 | 10,120 | +| `jost-400-latin.woff2` | Jost 3.710 | 400 | 9,404 | + +IBM Plex Sans is a variable font with a `wght 100..700` axis, so one file serves +all three weights — the same single file Google served for all three before. + +`catalog.json` pins each file by sha256. `node verify.mjs` re-checks every one of +them offline, and runs as this package's `test` script, so `pnpm test` covers it. + +## Source and provenance + +These are **the exact bytes `next/font/google` was already downloading** for this +repo — lifted from the `_next/static/media` output of a build on `main` +(`2c97210`), not re-exported or re-subset from somewhere else. That is deliberate: +it makes "no visual change" true by construction rather than by inspection. Same +files, same weights, same `font-display`, same CSS variable names. + +Independent corroboration: all eight IBM Plex latin and latin-ext faces Google +served this repo are byte-identical (sha256) to the files vendored in the +`af-site` brand repo, which pins its own roster against the `google/fonts` `ofl/` +tree. The four IBM Plex faces used here are among them — two repos arrived at the +same bytes by different routes. + +Oswald and Jost do **not** match af-site byte for byte, and should not: both are +variable fonts upstream, and `next/font/google` asked Google to pin the axis to +the one weight this product uses (`Oswald:wght@600`, `Jost:wght@400`), which +yields a smaller static instance than the axis-preserving file af-site vendors. +Same family, same version, same rendered weight. + +## Subset + +`latin` only, matching the `subsets: ["latin"]` the apps have always declared. + +`next/font/google` emits `@font-face` rules for *every* subset Google returns and +only **preloads** the declared ones, so builds on `main` shipped 29 files (adding +latin-ext, greek, cyrillic, cyrillic-ext, vietnamese) of which these same 6 were +the preloaded latin set. Dropping the other 23 is safe here and was checked, not +assumed: a scan of `apps/`, `packages/`, `e2e/`, `acceptance/` and the demo project +found **zero** codepoints in the latin-ext, Greek, Cyrillic or Vietnamese ranges. +The only non-ASCII characters the product renders are arrows and marks +(`←`, `→`, `✓`, `✗`, `↳`, …) which fall outside *every* subset Google served, so +they resolved to the system stack before this change and still do. + +Note the practical edge: `latin` covers `U+0000–U+00FF`, so all of the Western +European accented letters (`é à ö ñ ç ü …`) render in the brand faces. Text a user +authors in Polish, Czech, Turkish, Baltic or Vietnamese uses `latin-ext` +codepoints and will fall back to the system stack — as it did before for anything +beyond that, and as `af-site` also accepts by contract. If that ever needs to +change, add the latin-ext faces here and give each family its own `unicode-range`; +`next/font/local` applies `declarations` to every `src` entry in a call, so a +second subset needs either a merged file or a separate call per subset. + +## Licensing + +All four families are SIL Open Font License 1.1. This is not taken on trust — +each vendored binary declares it in its own `licenseURL` name record: + +| Family | `licenseURL` | +| --- | --- | +| Oswald | `https://scripts.sil.org/OFL` | +| IBM Plex Sans | `http://scripts.sil.org/OFL` | +| IBM Plex Mono | `http://scripts.sil.org/OFL` | +| Jost | `http://scripts.sil.org/OFL` | + +`OFL.txt` carries the full license text and each family's copyright notice, as +OFL 1.1 clause 2 requires of a redistribution. Copyright lines there are quoted +verbatim from the `copyright` name record of the vendored files. + +To re-read those records from the binaries: + +```js +import fontkit from "fontkit"; +const font = fontkit.openSync("files/oswald-600-latin.woff2"); +console.log(font.copyright, font.name.records.licenseURL); +``` + +## Changing the type set + +Don't do it here alone. These faces mirror `af-site/assets/af.css`, which is the +brand source of truth for Aesthetic Function type. Change that first, then bring +the files across and re-run `node verify.mjs` after updating `catalog.json`. diff --git a/packages/fonts/catalog.json b/packages/fonts/catalog.json new file mode 100644 index 0000000..7b47e64 --- /dev/null +++ b/packages/fonts/catalog.json @@ -0,0 +1,99 @@ +{ + "$comment": "Byte-pinned roster of the vendored Aesthetic Function type set. These are the exact files next/font/google previously downloaded from fonts.gstatic.com at build time for apps/web and apps/composer; they are now committed so no build touches the network. Regenerate nothing by hand: `node verify.mjs` re-hashes every file against this record, offline.", + "source": "Google Fonts (fonts.gstatic.com), via next/font/google in this repo at commit 2c97210", + "subset": "latin", + "license": { + "id": "OFL-1.1", + "text": "OFL.txt", + "evidence": "every family declares scripts.sil.org/OFL in its licenseURL name record" + }, + "totalBytes": 92652, + "faces": [ + { + "file": "oswald-600-latin.woff2", + "family": "Oswald", + "weights": [ + "600" + ], + "style": "normal", + "version": "4.103", + "variable": false, + "subset": "latin", + "license": "OFL-1.1", + "bytes": 12776, + "sha256": "b5298a57a4f1058d9cf45db659c5b29f21f55b6f9fd0efc6faa13b1b8db523b6" + }, + { + "file": "ibm-plex-sans-variable-latin.woff2", + "family": "IBM Plex Sans", + "weights": [ + "400", + "500", + "600" + ], + "style": "normal", + "version": "3.201", + "variable": "wght 100..700", + "subset": "latin", + "license": "OFL-1.1", + "bytes": 40240, + "sha256": "056e4e2459f57a0033c8c9c844ff19d6e42ac8602027803d4345823bcc939818" + }, + { + "file": "ibm-plex-mono-400-latin.woff2", + "family": "IBM Plex Mono", + "weights": [ + "400" + ], + "style": "normal", + "version": "2.3", + "variable": false, + "subset": "latin", + "license": "OFL-1.1", + "bytes": 10052, + "sha256": "c36f509c0a8f9f85f29cb44bc8701d8a9e0b14c499e77a884f789ead7093a7ac" + }, + { + "file": "ibm-plex-mono-500-latin.woff2", + "family": "IBM Plex Mono", + "weights": [ + "500" + ], + "style": "normal", + "version": "2.3", + "variable": false, + "subset": "latin", + "license": "OFL-1.1", + "bytes": 10060, + "sha256": "a76f53ca6612e7b3828eec2311098675b7f9849ae4169a8bcef6302aec02a6c0" + }, + { + "file": "ibm-plex-mono-600-latin.woff2", + "family": "IBM Plex Mono", + "weights": [ + "600" + ], + "style": "normal", + "version": "2.3", + "variable": false, + "subset": "latin", + "license": "OFL-1.1", + "bytes": 10120, + "sha256": "ad4580d8cb4b5f627c2d18457656732f7f7b070f7837fbc380e08054157e6f6c" + }, + { + "file": "jost-400-latin.woff2", + "family": "Jost", + "weights": [ + "400" + ], + "style": "normal", + "version": "3.710", + "variable": false, + "subset": "latin", + "license": "OFL-1.1", + "bytes": 9404, + "sha256": "b249869fc8fb37ef0328d6f603283863ce373f52d1a4af6380f54d991f45dec1" + } + ] +} diff --git a/packages/fonts/fallbacks.css b/packages/fonts/fallbacks.css new file mode 100644 index 0000000..4a1f060 --- /dev/null +++ b/packages/fonts/fallbacks.css @@ -0,0 +1,62 @@ +/* + * Metric-matched fallback faces for the vendored type set. + * + * `next/font` normally generates these for you: it synthesises an + * " Fallback" face from `local("Arial")` plus overrides, so that text + * painted during `font-display: swap` — and any character the face does not + * carry — occupies close to the space the real font will. + * + * The generated numbers are NOT stable across the google -> local move. + * next/font/google reads them from a metrics database keyed on the family; + * next/font/local recomputes them from whichever file you hand it, and our + * files are the `latin` subset, whose OS/2 xAvgCharWidth differs from the full + * font's. Letting it recompute shifted IBM Plex Mono's size-adjust from 134.59% + * to 131.49% and visibly narrowed every character the subset does not carry + * (the `→` in the pipeline views, for one). + * + * So the faces are pinned here instead, at exactly the values next/font/google + * emitted on main (2c97210), and the loaders pass `adjustFontFallback: false` + * so nothing overwrites them. That keeps the rendered page pixel-identical + * across this change, and it pins the fallback metrics against drift the same + * way catalog.json pins the font bytes. + * + * If the type set ever changes, regenerate these from a build rather than + * editing by hand: + * grep -o '@font-face{font-family:[^}]*Fallback[^}]*}' apps/web/out/_next/static/css/*.css + */ + +@font-face { + font-family: "Oswald Fallback"; + src: local("Arial"); + ascent-override: 146.51%; + descent-override: 35.49%; + line-gap-override: 0%; + size-adjust: 81.43%; +} + +@font-face { + font-family: "IBM Plex Sans Fallback"; + src: local("Arial"); + ascent-override: 101.32%; + descent-override: 27.18%; + line-gap-override: 0%; + size-adjust: 101.17%; +} + +@font-face { + font-family: "IBM Plex Mono Fallback"; + src: local("Arial"); + ascent-override: 76.16%; + descent-override: 20.43%; + line-gap-override: 0%; + size-adjust: 134.59%; +} + +@font-face { + font-family: "Jost Fallback"; + src: local("Arial"); + ascent-override: 111.45%; + descent-override: 39.06%; + line-gap-override: 0%; + size-adjust: 96.01%; +} diff --git a/packages/fonts/files/ibm-plex-mono-400-latin.woff2 b/packages/fonts/files/ibm-plex-mono-400-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..52b6c7595dd5e2106676e7c52fcff18539607879 GIT binary patch literal 10052 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 literal 0 HcmV?d00001 diff --git a/packages/fonts/files/ibm-plex-mono-500-latin.woff2 b/packages/fonts/files/ibm-plex-mono-500-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..3308bce2432c298817ed344eeac33007c83cecd0 GIT binary patch literal 10060 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 literal 0 HcmV?d00001 diff --git a/packages/fonts/files/ibm-plex-sans-variable-latin.woff2 b/packages/fonts/files/ibm-plex-sans-variable-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..e5ebabbddc52459948f27539fb06d60db5fc2929 GIT binary patch literal 40240 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

@c9dd0tdWKJRyVy<;N5h+G* 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 literal 0 HcmV?d00001 diff --git a/packages/fonts/files/jost-400-latin.woff2 b/packages/fonts/files/jost-400-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..922cde36840a4c4e335f0c52385c571de499fa03 GIT binary patch literal 9404 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 CWCPg% literal 0 HcmV?d00001 diff --git a/packages/fonts/files/oswald-600-latin.woff2 b/packages/fonts/files/oswald-600-latin.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..f63e376c7663cf35cb97478e72be0594acb118db GIT binary patch literal 12776 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 f.file)); +for (const file of fs.readdirSync(path.join(HERE, "files"))) { + if (!known.has(file)) failures.push(`${file}: on disk but not in catalog.json`); +} + +if (failures.length > 0) { + console.error("fonts: catalog verification FAILED"); + for (const f of failures) console.error(` - ${f}`); + process.exit(1); +} + +console.log( + `fonts: ${catalog.faces.length} faces verified against catalog.json ` + + `(${(bytes / 1024).toFixed(1)} KB, subset ${catalog.subset}, ${catalog.license.id})` +); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 094ea72..bf8daba 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -329,6 +329,8 @@ importers: specifier: ^3.0.0 version: 3.2.7(@types/node@22.20.1)(jiti@2.7.0)(lightningcss@1.32.0)(tsx@4.23.0) + packages/fonts: {} + packages/replay: devDependencies: '@dspack-studio/agui-bridge':