makiri 0.7.0-x86_64-linux → 0.8.0-x86_64-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 057d17309e6ec32322151e0c42a7a736d8f9de816e1a856a7694746ce538f3d4
4
- data.tar.gz: 92b19e03c48a598e87ad63ad629882f66ef3ab97beeda9b15b54264848cb9136
3
+ metadata.gz: aaa0673601c9e4b858564d196471db5d338b63d736b26847487e91af618ac19a
4
+ data.tar.gz: 7bfb1ffe5cfac89c2e2864910a446cd59627a7b80c61bf9a914cf52d3cc86c1d
5
5
  SHA512:
6
- metadata.gz: a2a1e38ac40746a815ae63305d756a4680f8145fd16799d919c94e1300f4c7ccf148a88faf6b05f35853a6c419fcc26d84d675e5341bdb4ab3659bb63339f64d
7
- data.tar.gz: b76a10fb4646a76ca78217c83274941c5651847d6691ecef9116ee2e1a896012963b1cec0694f9cc0eef425d544a94a76076f06359504c975e8c600ad8e52c7c
6
+ metadata.gz: 1c48b07e6afedb7af3612161e3bc1e8d6cd080144b319eaaeb846288046e333ddd7592ea32048b11569cfacc0fd54305ccf470c0649a0beb270d47f00009d21e
7
+ data.tar.gz: 9271acc96f1e6a185366fc13ea4ad14574b6af835a00d6240664e5f9f49014f95d5076fd8a161b204e8825d60de43332d8e5ee544079b9c750eba2355b0ba20d
@@ -24,11 +24,16 @@ jobs:
24
24
  # (intra-arena overflows). Runs on Linux because Valgrind is x86_64/amd64
25
25
  # Linux only.
26
26
  valgrind-memcheck:
27
- name: Valgrind memcheck (Ruby ${{ matrix.ruby }})
27
+ name: Valgrind memcheck (Ruby ${{ matrix.ruby }}, shard ${{ matrix.shard }}/4)
28
28
  runs-on: ubuntu-latest
29
29
  timeout-minutes: 360
30
30
  env:
31
31
  BUNDLE_WITH: valgrind
32
+ # Shard the suite across the matrix below: 4 parallel jobs each memcheck a
33
+ # quarter of the spec files, so the whole suite finishes in ~1/4 the
34
+ # wall-clock with no loss of coverage (each shard is balanced by file size).
35
+ VALGRIND_SHARDS: "4"
36
+ VALGRIND_SHARD_INDEX: ${{ matrix.shard }}
32
37
  # These heavy jobs verify memory discipline (uninit values, intra-arena
33
38
  # overflows, use-after-move), not the property space - so the full
34
39
  # 300-iteration PBT sweep (already run by the normal CI matrix) is
@@ -37,10 +42,16 @@ jobs:
37
42
  # keeping the run tractable.
38
43
  PBT_COUNT: "15"
39
44
  CSS_PBT_COUNT: "15"
45
+ # --track-origins roughly doubles memcheck's runtime and only adds an origin
46
+ # backtrace to a finding (the finding itself is still reported without it).
47
+ # Drop it on the frequent post-merge push gate to halve its runtime; keep it
48
+ # for the thorough nightly / manual runs, where the backtrace aids triage.
49
+ VALGRIND_TRACK_ORIGINS: ${{ github.event_name == 'push' && 'no' || 'yes' }}
40
50
  strategy:
41
51
  fail-fast: false
42
52
  matrix:
43
53
  ruby: ["3.4"]
54
+ shard: [0, 1, 2, 3] # keep in sync with VALGRIND_SHARDS above
44
55
 
45
56
  steps:
46
57
  - name: Checkout (with vendored Lexbor submodule)
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.8.0] - 2026-07-12
4
+
5
+ ### Fixed
6
+
7
+ * `Document#import_node` (DOM `importNode` / `adoptNode`) now imports an HTML
8
+ element whose name is a valid DOM name but not a well-formed XML QName (e.g.
9
+ `":good:times:"`, `"x<"`, `"0:a"`) instead of raising. Such an element is not
10
+ XML-serializable (`#to_xml` raises). An element carrying a similarly lenient
11
+ attribute name is still rejected.
12
+
3
13
  ## [0.7.0] - 2026-07-11
4
14
 
5
15
  ### Added
data/Rakefile CHANGED
@@ -88,7 +88,12 @@ begin
88
88
  "--error-limit=no",
89
89
  "--trace-children=yes", # spec processes may fork
90
90
  "--undef-value-errors=yes", # the point of this job (ruby_memcheck defaults to =no)
91
- "--track-origins=yes", # report where an uninitialised value came from
91
+ # Origin tracking (where an uninitialised value came from) roughly DOUBLES
92
+ # memcheck's run time. It is a diagnostic aid, not a detection capability -
93
+ # memcheck still reports the uninitialised USE without it - so the frequent
94
+ # post-merge push gate turns it off (VALGRIND_TRACK_ORIGINS=no) to run in
95
+ # ~half the time, while the nightly / manual runs keep it on for the backtrace.
96
+ "--track-origins=#{ENV.fetch('VALGRIND_TRACK_ORIGINS', 'yes')}",
92
97
  "--leak-check=no", # leaks are `rake leaks`' job, not this one
93
98
  ],
94
99
  )
@@ -96,7 +101,34 @@ begin
96
101
  namespace :spec do
97
102
  desc "Run the spec suite under Valgrind memcheck (ruby_memcheck; needs the " \
98
103
  ":valgrind bundler group and the valgrind binary)"
99
- RubyMemcheck::RSpec::RakeTask.new(valgrind: :compile)
104
+ RubyMemcheck::RSpec::RakeTask.new(valgrind: :compile) do |t|
105
+ # Let spec_helper skip :slow examples (fail-closed limit tests whose sheer
106
+ # volume dominates memcheck without adding memory-safety coverage).
107
+ ENV["VALGRIND"] = "1"
108
+
109
+ # Optional sharding for CI wall-clock: with VALGRIND_SHARDS=N (>1) the spec
110
+ # files are partitioned into N groups and this run does only group
111
+ # VALGRIND_SHARD_INDEX, so N parallel matrix jobs cover the whole suite in
112
+ # ~1/N the time WITHOUT dropping any coverage. Files are packed
113
+ # largest-first onto the currently-lightest shard (greedy LPT by file size,
114
+ # a proxy for runtime), so the slowest shard - which sets wall-clock - is
115
+ # balanced rather than left to name order. Deterministic, so every shard
116
+ # computes the same partition and takes its own index. Default N=1 = the
117
+ # whole suite (local `rake spec:valgrind`).
118
+ shards = Integer(ENV.fetch("VALGRIND_SHARDS", "1"))
119
+ if shards > 1
120
+ index = Integer(ENV.fetch("VALGRIND_SHARD_INDEX", "0"))
121
+ buckets = Array.new(shards) { { load: 0, files: [] } }
122
+ # sort by (size desc, name) so the packing is fully deterministic across
123
+ # shards regardless of Array#sort stability.
124
+ Dir["spec/**/*_spec.rb"].sort_by { |f| [-File.size(f), f] }.each do |f|
125
+ b = buckets.min_by { |x| x[:load] }
126
+ b[:files] << f
127
+ b[:load] += File.size(f)
128
+ end
129
+ t.pattern = buckets.fetch(index)[:files]
130
+ end
131
+ end
100
132
  end
101
133
  rescue LoadError
102
134
  # ruby_memcheck not installed (optional :valgrind group absent) - skip the task.
Binary file
Binary file
Binary file
Binary file
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Makiri
4
- VERSION = "0.7.0"
4
+ VERSION = "0.8.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: makiri
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: x86_64-linux
6
6
  authors:
7
7
  - takahashim