doxa-maps/documentation/vendored-font-noto-serif-devanagari.md
doxa-maps-88655c70 3e16f67899 Move the vendored font's README out of the served folder
check:public-hygiene went from PASS to FAIL across a merge, with two
findings -- "documentation in a served folder" for
public/assets/fonts/noto-serif-devanagari/README.md and for the copy
generate-tree stages into the tree. It arrived with 467b7f0, "Hindi
unblocked with a vendored Devanagari face". public-hygiene sits inside
build:unlocked, so main was red-gating every builder, not just this branch.

NOT deleted, because the obvious move would have been the wrong one. The
folder also carries LICENSE (SIL OFL 1.1). That file is a DISTRIBUTION
OBLIGATION and has to stay beside the woff2 -- removing it to satisfy a
hygiene gate would trade a lint finding for a licence breach. The README is
developer rationale, and it answers something the files cannot: why the font
is vendored at all, and why the 400 and 700 faces resolve to one variable
file. So it moved to documentation/, verbatim, with a header recording where
it came from and why.

check:public-hygiene 0 after. gates:pre 0, gates:post 17/18 -- the remaining
failure is the pre-existing verify/tables-complete break from the visa-leak
fix, still filed and still not ours.

Also in this tick, after main moved 7 commits including "Regions: one
rollup, ported from theirs" (the same file carrying the MapLibre boundary
branch): merged, rebuilt, re-verified. The branch is intact and the
boundaries still load -- 400 features on mapbox, 467 on maplibre, 0 console
errors -- and the full provider sweep still reads 14/16 with no regression.
2026-09-24 04:15:26 +00:00

2 KiB

Noto Serif Devanagari — the Devanagari subset only

Why vendored: the prayer packet's font stack is Georgia / Palatino Linotype / serif, none of which carry Devanagari. Measured by rendering Devanagari at 48px and READING THE PIXELS, Hindi came out as tofu boxes — this machine has zero Devanagari fonts (fc-list). A hi translation without this file would ship a page of empty rectangles.

Licence: SIL Open Font License 1.1 (see LICENSE). Free to bundle and serve.

Subset: U+0900-097F plus the Devanagari extensions Google's own subsetting selects — the devanagari range ONLY, matching how poppins/ ships latin and latin-ext separately so a page downloads only what it needs. 124 KB, against 6-8 KB for a Latin subset; that is the cost of the script's glyph count, and it loads only on a Hindi packet.

Source: the woff2 Google Fonts serves for Noto+Serif+Devanagari:wght@400;700 with a modern browser UA. Note the 400 and 700 faces resolve to the SAME file — it is a variable font, so one file covers both weights and vendoring two would duplicate 124 KB for nothing.

To refresh: request that CSS with a Chrome user-agent (without one Google serves unsubsetted TTF), take the @font-face block whose unicode-range contains U+0900, and download its woff2.