You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Build the next major GLG-Mono pipeline as a KR-first font, removing the inherited PlemolJP / IBM Plex Sans JP build structure as the architectural base.
This is not a cleanup patch to the current v1 pipeline. It is a parallel v2 rewrite with explicit acceptance gates.
Why
GLG-Mono inherited its build architecture from yuru7/PlemolJP. That was a practical starting point, but it leaves a Korean font structurally dependent on a Japanese base:
IBM Plex Sans JP is opened as the base face;
IBM Plex Sans KR is merged onto it;
FONT_NAME = PlemolJP remains an internal compatibility invariant;
Japanese comments, naming, selection rules and FontForge round-trips encode upstream assumptions;
multiple local fixes now compensate for behavior that a KR-first pipeline should own directly.
Upstream's latest commit is 55e5011, dated 2025-06-28. This project should not plan around future upstream work. We will maintain and evolve the Korean font ourselves, with agent-assisted engineering and reproducible local verification.
Strategic decision
KR is the primary CJK design source and architectural base.
IBM Plex Mono remains the Latin programming face unless a separate decision changes it.
Han/Kana coverage must become an explicit product decision. If IBM Plex Sans JP remains as a supplementary glyph source, it must be an isolated coverage input—not the base that controls the entire build.
The current v1 pipeline remains frozen as a reproducible legacy reference until v2 passes its gates.
Do not perform a big-bang rewrite in fontforge_script.py on main.
Work plan
1. Freeze and inventory v1
Record canonical hashes and metadata for the release source faces.
Inventory every source font and explain which codepoints/features it contributes.
Inventory FontForge round-trips, width transforms, alt-unicode handling, glyph overrides, NF paths and legal records.
Classify inherited files as required, replaceable or dead.
Preserve the current desktop and eight-file webfont verifiers as regression oracles.
2. Specify the v2 composition contract
Define source precedence for Latin, Hangul/Jamo, symbols, Han, Kana, box drawing and PUA.
Decide whether Kana and the current Han repertoire remain in the desktop font.
Define 1:2 and 3:5 metrics without relying on PlemolJP internals.
Define Regular/Bold/Italic/BoldItalic behavior, including true Latin italic and intentional CJK oblique policy.
Define GSUB/GPOS, combining-mark, zero-advance and vertical-metric contracts.
Define legal provenance and name-table contents for every retained source.
3. Build KR-first in parallel
Create a small, staged pipeline with explicit intermediate artifacts.
Open IBM Plex Sans KR as the primary CJK face.
Merge IBM Plex Mono and any supplementary coverage through declared policy tables rather than implicit selection order.
Replace internal PlemolJP naming and compatibility assumptions.
Keep generated artifacts out of Git and make clean builds deterministic.
Avoid introducing new opaque FontForge save/reopen cycles; every unavoidable round-trip must have a verifier.
4. Acceptance gates
Complete modern Hangul syllables, Jamo and compatibility Jamo.
Correct Korean bearings and fixed-width alignment in all release faces.
Latin source precedence, true italics and zero-advance glyphs preserved.
Declared Han/Kana/symbol coverage exactly matches the v2 specification.
Decomposed outlines, advances and LSBs checked against the selected source of truth.
GSUB/GPOS shaping canaries pass for Latin combining text, NFD Korean, Jamo, Han/Kana and ligatures.
Vertical metrics, hinting, BASE, legal name records and copyrights pass.
Nerd Fonts, if retained, pass the same width and bearing gates.
The eight-file {core,jp} web delivery contract remains reproducible or is replaced only by an explicit new decision.
Two clean builds produce byte-identical artifacts.
Linux terminal, browser and macOS/VS Code canaries pass before v2 replaces v1.
5. Retire the inherited structure
Remove dead PlemolJP/PlemolKR scripts, stale docs and duplicate build paths.
Remove FONT_NAME = PlemolJP and internal Plemol naming.
Update repository history/provenance documentation without erasing upstream credit.
Keep only source assets and notices required by the final v2 composition.
Archive the v1 build instructions and migration notes.
Exit criteria
This issue is complete when:
GLG-Mono builds from a KR-first pipeline without PlemolJP as a structural/runtime dependency;
any JP source is an explicit supplementary coverage module;
the declared desktop and webfont quality gates pass on clean deterministic builds;
v1 legacy code is removed or archived only after v2 is accepted.
Non-goals
Rewriting the active v1 webfont work while it is still being stabilized.
Removing upstream copyright or provenance records.
Silently dropping Han/Kana coverage to make the rewrite easier.
Assuming an upstream maintainer will solve this architecture for us.
Goal
Build the next major GLG-Mono pipeline as a KR-first font, removing the inherited PlemolJP / IBM Plex Sans JP build structure as the architectural base.
This is not a cleanup patch to the current v1 pipeline. It is a parallel v2 rewrite with explicit acceptance gates.
Why
GLG-Mono inherited its build architecture from yuru7/PlemolJP. That was a practical starting point, but it leaves a Korean font structurally dependent on a Japanese base:
FONT_NAME = PlemolJPremains an internal compatibility invariant;Upstream's latest commit is 55e5011, dated 2025-06-28. This project should not plan around future upstream work. We will maintain and evolve the Korean font ourselves, with agent-assisted engineering and reproducible local verification.
Strategic decision
fontforge_script.pyonmain.Work plan
1. Freeze and inventory v1
2. Specify the v2 composition contract
3. Build KR-first in parallel
PlemolJPnaming and compatibility assumptions.4. Acceptance gates
BASE, legal name records and copyrights pass.{core,jp}web delivery contract remains reproducible or is replaced only by an explicit new decision.5. Retire the inherited structure
FONT_NAME = PlemolJPand internal Plemol naming.Exit criteria
This issue is complete when:
Non-goals