Skip to content

Release 2.9.1 — interop bug fixes + contributors credit#38

Merged
airmang merged 4 commits into
mainfrom
release/2.9.1
Apr 27, 2026
Merged

Release 2.9.1 — interop bug fixes + contributors credit#38
airmang merged 4 commits into
mainfrom
release/2.9.1

Conversation

@airmang
Copy link
Copy Markdown
Owner

@airmang airmang commented Apr 27, 2026

요약

2.9.0 이후 병합된 외부 기여자 3개 PR(#31, #36, #37)을 묶어 2.9.1 패치 릴리즈로 내보내기 위한 릴리즈 PR입니다. 함께 2.9.0 상태에서 누락됐던 몇 가지 정합성 문제를 해소합니다.

포함 내용

  1. docs: CONTRIBUTORS.md 추가 — 이번 릴리즈에 반영된 외부 기여를 기록합니다.

  2. chore(packaging): 2.9.1 버전 범프 + legacy license classifier 제거

    • pyproject.toml에 PEP 639 license expression과 legacy License :: OSI Approved :: Apache Software License classifier가 공존해 setuptools>=77 기준 pip install -e . / python -m build가 실패했습니다. classifier 제거로 해결했습니다.
    • 재현:
      ```
      InvalidConfigError: License classifiers have been superseded by license expressions (PEP 639).
      Please remove: License :: OSI Approved :: Apache Software License
      ```
  3. docs: CHANGELOG 2.9.1 섹션 고정

    • 릴리즈 범위만 2.9.1로 분리하고, Unreleased에 있던 schema-validation 관련 항목은 그대로 Unreleased로 남겨 두었습니다(현재 머지되지 않은 feature 범위).
  4. test(packaging): Apache-2.0 relicense 후속 정리

    • tests/test_packaging_license_metadata.py가 여전히 과거 LicenseRef-python-hwpx-NonCommercial을 검증하고 있어 dev deps 설치 시 실패했습니다. Apache-2.0 기준으로 정정했습니다.

검증

  • 로컬(Python 3.11, lxml 5.4): `pytest tests/` → 253 passed, 2 skipped, 0 failed (skipped는 외부 샘플 패키지 부재 케이스).
  • `python -m build` → sdist + wheel 모두 성공.
  • 실전 회귀 확인 (2.9.0에서 깨지던 시나리오):
    • `add_run(bold=True)` ✅
    • subList 제거된 form 셀에 `cell.text = ...` ✅
    • 50 paragraph + 5 table 생성 후 모든 `id` 속성이 signed int32 내부에 존재 ✅
    • round-trip (save → open → re-save) ✅

머지 이후 해야 할 작업 (별도 PR/태그)

  1. `main`에서 v2.9.1 태그 푸시 → GitHub Release 노트 작성 (contributors thank-you 포함).
  2. PyPI 업로드 (Trusted Publisher 워크플로 또는 수동).
  3. hwpx-mcp-server에서 `python-hwpx>=2.9.1` bump + `_patch_upstream_id_generators_to_signed_int32` shim 제거 PR.

연결 이슈

검토 포인트

  • CHANGELOG에서 Unreleased와 2.9.1 분리 경계가 의도하신 범위와 일치하는지 확인 부탁드립니다.
  • CONTRIBUTORS.md 문구와 등재 기준이 이후 릴리즈에도 이어갈 수 있는 템플릿인지 점검해 주세요.

airmang added 4 commits April 27, 2026 22:42
Credit external contributors whose merged work makes up 2.9.1:

- @seonghoony — signed int32 id generator fix (#36 for #34) and
  bundled Skeleton.hwpx rewrite (#37 for #35)
- @hhy827 — ET.SubElement / lxml dispatch fix in cell text and
  run-style modifier paths (#31 for #30)

Also credit @devnoff for the detailed repro and fix sketch in the
#30 discussion that #31 builds on.

CONTRIBUTING.md and README.md link to the new CONTRIBUTORS.md so
merged contributions surface without readers having to dig through
release notes.
…fier

setuptools >= 77 (required by pyproject.toml) rejects combining a PEP
639 'license' expression with the legacy
'License :: OSI Approved :: Apache Software License' classifier. 2.9.0
shipped with both, so 'pip install -e .' failed with:

    InvalidConfigError: License classifiers have been superseded by
    license expressions (PEP 639). Please remove:
        License :: OSI Approved :: Apache Software License

The Apache-2.0 declaration is already carried by 'license = "Apache-2.0"'
and 'license-files = ["LICENSE", "NOTICE"]', so the classifier is
redundant. Dropping it unblocks source installs and sdist/wheel builds.

Also bump the package version to 2.9.1 to carry the interop bug fixes
merged since 2.9.0 (#30, #34, #35).
Carve a 2.9.1 section out of Unreleased that covers only what actually
ships in the release:

- interop fixes #30, #34, #35 (attributed to contributors)
- pyproject PEP 639 license classifier cleanup that unblocks source
  installs on setuptools>=77
- regression tests that ship with the above
- CONTRIBUTORS.md

Also move the Apache-2.0 relicense note from Unreleased into 2.9.1,
since it already went out as part of the same merge train after 2.9.0.

The schema-validation work still in Unreleased is not part of 2.9.1
and stays in Unreleased for the next feature release.
The relicense to Apache-2.0 updated pyproject.toml and LICENSE but left
tests/test_packaging_license_metadata.py still asserting the previous
'LicenseRef-python-hwpx-NonCommercial' expression. The assertion started
matching again only because the test skipped when 'build' was not
installed; with dev deps present it failed on both built wheel and
sdist.

Point the assertion at the current license expression so the test
actually exercises relicense correctness.
@airmang airmang merged commit b61ac73 into main Apr 27, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant