Skip to content

roadmap: replace the inherited JP base with a KR-first v2 pipeline #2

Description

@junghan0611

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:

  • 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:

  1. GLG-Mono builds from a KR-first pipeline without PlemolJP as a structural/runtime dependency;
  2. any JP source is an explicit supplementary coverage module;
  3. the declared desktop and webfont quality gates pass on clean deterministic builds;
  4. 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions