# CAD drawing font

Full, unmodified Noto Sans CJK SC Regular, 16,437,364 bytes. SIL Open Font License 1.1; see OFL.txt.
Source: https://github.com/notofonts/noto-cjk/blob/f8d157532fbfaeda587e826d4cd5b21a49186f7c/Sans/OTF/SimplifiedChinese/NotoSansCJKsc-Regular.otf
SHA-256: 2c76254f6fc379fddfce0a7e84fb5385bb135d3e399294f6eeb6680d0365b74b

Browser asset: `NotoSansCJKsc-Regular-2c76254f6fc3.otf`, identical in all 16,437,364 bytes to the canonical `NotoSansCJKsc-Regular.otf`. The content-fingerprinted browser URL receives `Cache-Control: public, max-age=31536000, immutable`. The original fixed URL remains available for already-deployed compute clients. No subset, conversion or license change is introduced.

This is a host resource, not embedded in the CADCraft binary. It is loaded only when the drawing workbench is opened, in parallel with WASM. The Node adapter registers the identical bytes in each isolated instance. The complete upstream face is retained, with its supported glyph coverage; no limited sample-text subset is used. The browser fetches the font from the same origin and does not send drawing data.

To reproduce the web bundle, place this original font at app/public/engine/fonts/NotoSansCJKsc-Regular.otf and its license here, then run research/build-engine.sh. Font download failure stops editor readiness with a retry message so incomplete glyph rendering is not mistaken for successful loading.

`research/package-web.py` derives the browser filename from the current full font SHA-256 on every build and updates the bootstrap URL automatically; `research/package-engine.py` rejects a missing/mismatched alias and records both assets plus the full hash in `manifest.json`. A future intentional font change therefore receives a new browser URL. Preserve the canonical asset and the applicable full-font license/provenance when updating it.
