Skip to content

Release 1.1.0 — lockstep with libleptris 1.1.0 - #19

Merged
ronaldtse merged 5 commits into
mainfrom
release/1.1.0
Aug 22, 2026
Merged

Release 1.1.0 — lockstep with libleptris 1.1.0#19
ronaldtse merged 5 commits into
mainfrom
release/1.1.0

Conversation

@ronaldtse

Copy link
Copy Markdown
Contributor

Summary

Lockstep release with libleptris 1.1.0, per the version-lockstep rule (version.rb + build.yml pin + CHANGELOG in one PR):

  • lib/leptris/version.rb1.1.0
  • .github/workflows/build.yml: C library checkout pinned to v1.1.0
  • CHANGELOG.md: 1.1.0 section folding in the architecture deepening + ParseOptions.noblanks work already on main
  • Element#key? → native leptris_element_has_attribute (the v0.4.4-era export gap is closed upstream); both stale "not exported" comments removed from ffi.rb; leptris_xinclude_get_encoding now bound

Compat verification (against a clean v1.1.0 build)

  • Symbol-level: all 167 attached functions still export — zero load-breakers. Header - lines were declaration moves, not removals.
  • Windows: src/leptris/sax/{parser,streaming}.c now carry 4+1 LEPTRIS_API annotations (#430 fixed via #465) — all 9 CI jobs expected green, including the three Windows ones that have been red the entire project.
  • Suite: 188/188 passing against v1.1.0.

New upstream surface not yet bound (follow-up material)

17 new exports: the attribute-iteration face (element_first_attribute/attribute_next/get_name/get_value), mixed-nodeset API (xpath_result_node_kind/get_node/node_name/node_value), parse/parse_options_init/parse_with_options family, serialize_document, document_get_dtd, element_prefix, xpath_register_function.

Test plan

  • CI green on all 9 jobs — first fully green matrix if Windows passes
  • After merge: release via next_version=skip (version already bumped here)

- build.yml: pin the C library checkout to v1.1.0
- version.rb: 1.1.0; CHANGELOG entry folding the architecture
  deepening + noblanks work into this release
- Element#key? now calls native leptris_element_has_attribute
  (export gap closed upstream); the two stale "not exported"
  comments in ffi.rb are gone and leptris_xinclude_get_encoding
  is bound
- Windows unblocked: libleptris 1.1.0 annotates the five SAX
  definitions (upstream #430 via #465), so all 9 CI jobs are
  expected green for the first time

Verified against a clean v1.1.0 build: symbol-level compat
clean (all 167 attached functions still export), 188/188 specs.
The four wrapper-identity specs failed on the Windows CI matrix
(188 examples, 4 failures; mac/linux green): ObjectSpace::WeakMap
holds values weakly, so between two doc.root calls the first wrapper
was referenced only by the map — any GC sweep evicted it and the
second call built a fresh object. Identity was a GC timing race,
not a property of the interface.

The cache is now a plain Hash owned by the Document and cleared in
free. Cost: at most one wrapper per node actually visited, held
until the document dies.

Full suite 188/188 locally; doc.root.equal?(doc.root) survives 50
forced GC.start rounds.
@ronaldtse
ronaldtse merged commit 6ab7350 into main Aug 22, 2026
10 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