Skip to content

v1.3.1

Latest

Choose a tag to compare

@github-actions github-actions released this 27 Sep 10:04
· 9 commits to main since this release
4e6e8c2

Fixed

  • hwp merge to .hwp keeps genuine HWP5 paragraph shapes in either input order. Conversion
    defaults now apply to each non-HWP5 input before header references are shifted, preserving
    native zero border-fill values and old line spacing and resolving converted border fills
    against their own palette. Converted inputs with zero or one border fill receive the missing
    canonical no-border entries before grafting (#390).
  • hwp merge to .hwp assigns distinct nonzero paragraph instance IDs when inputs already share
    IDs. The first occurrence keeps its ID; later duplicates and zeros receive unused IDs across
    sections and nested record trees, including raw-backed text boxes. Unmerged HWP5 round trips
    keep their original IDs (#393).
  • Part fills with hyperlinks or notes into .hwp retain their control content and pass semantic
    verification. Generated note list headers are now materialized independently of picture
    synthesis (#391).
  • Cross-format part fills first convert the unedited template with strict preservation checks,
    then verify edits against that target-format baseline. Conversion or editing failure leaves
    the destination unchanged. The outer snapshot follows the source format's native container
    limit. Nested private transactions use extended-length paths on Windows
    (#392).
  • hwp slots --forms no longer lists an inline label whose value text is only placeholder(s)
    (목표: {{최종목표}}). The placeholder is already listed as its own field, and a fill defers
    such a label to it, so a caller that sent a value for every scanned field always got those
    labels back as unmatched (counts 0) with a warning. A label with text of its own next to a
    slot (전략: 올해 {{추진전략}} 중심) is still listed, and so is a same-key sighting
    (담당자: {{담당자}}), which merges into one field. Labels also stay available when
    all slot names normalize to empty form keys (성명: {{()}})
    (#385).

Verification

  • Release-readiness run: https://github.com/STAIxBWLB/hwp-cli/actions/runs/36309366056
  • The private PDF-parity profile excludes four gates. The public one-page gate declares none
    (docs/design/21-pdf-parity.md section 4.3), so these exclusions describe the private profile
    only.
  • fonts: the document declares its dominant body face through a substFont, and the oracle
    host did not have that face either, so our substitutions resolve to the same faces the oracle
    embedded. The gate's substitution_free criterion is unreachable for this case by
    construction (section 4.5).
  • text: 1/13 pages byte-equal; the differences are pagination, not characters. Page 4's only
    diff is one line that crosses a page boundary (section 4.6).
  • raster: bad_pixel_pct 0.1418-0.2332, MAE 18.5-27.9, ink ratio 0.854-1.435, max abs dx/dy
    40px (section 4.6).
  • roi: 3 of 4 pass; only the page-2 diagram region fails (precision 0.848, recall 0.892)
    (section 4.6).
  • Provenance: these distances were measured by the private composite run of 2026-08-16, not by
    the public one-page gate.