canon 0.3.118 → 0.3.119

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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/docs/HANDOFF.adoc +140 -63
  3. data/lib/canon/version.rb +1 -1
  4. metadata +6 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 775ec23689366d5e58c5442ad78706027ba7f8e8efba6c06aede93907160f607
4
- data.tar.gz: 3f73899302308caf78050f7a692a159cb5e2cc53cbf822e0773c9632bd8beeef
3
+ metadata.gz: 21b508095633774da379c4f7c13cfaeabce997fbdb400139e7ecf7aedbf3df95
4
+ data.tar.gz: 9528d6c70d4b84f43bf77e5ca7b30a4bbf2ee8f3a172a010d0c6ea90228a9c75
5
5
  SHA512:
6
- metadata.gz: fb497832a82755ec47f0314429f58646c7a93be3e6597c226dc605788492db26b985f98923fd87bdac7b9d365724bb5a4907a73ca10255d99edd13621ce2e6da
7
- data.tar.gz: 972cf0c38d77cea7dea322430ba681456718c0aed4d153eef40116a438a855c70371289d0d6a74c00a5a3e51e12982d069ede9650e2bc710fd0448e89b8c5f8e
6
+ metadata.gz: 2de6ab858f2c4ca1ba6b83cad30058af17c2427e9688b13babde2bc249fdf5234d453575c36956b5edc2b343c4876647439b8d604bc5a3bcb96c746759c31a86
7
+ data.tar.gz: 51ac169753e93464ff16be5e869f0d157c1dcc0446311551322fcd19ee120a38a94d5581db9f167436f1d6ed8461b4fedff2899dd1d3fd12b32ac68957521b23
data/docs/HANDOFF.adoc CHANGED
@@ -5,43 +5,55 @@ published: false
5
5
 
6
6
  A snapshot of the open arcs across the org repos — what is known, where
7
7
  to dig, and what has already been proven — so any team can pick an issue
8
- up cold. Statuses as of 2026-10-28.
8
+ up cold. Statuses as of 2026-11-01.
9
9
 
10
- == lutaml/moxml
10
+ == State of the world
11
+
12
+ Shipped since the last board (2026-10-28): leptris 1.9.398.0 (the
13
+ #1866 adopt + parent-of-attribute fixes and the #1846/#1854/#1855 perf
14
+ slices), yeptris 0.6.52.0/0.6.53.0 (marshal reader #322, multibyte
15
+ breaks #782), moxml **0.6.0** (the Opal surface deleted by the owner's
16
+ phase-4 call, lutaml/moxml#516 — the forward Opal path is the moxml-ts
17
+ wasm binding, lutaml/moxml#489), lutaml-model 0.8.155 (admits both
18
+ moxml lines: `>= 0.5.139, < 0.7`), canon 0.3.118 (floors `leptris ~>
19
+ 1.9.398`, `yeptris ~> 0.6.52`, `moxml ~> 0.6.0`; Opal lane retired).
20
+
21
+ == lutaml/canon
11
22
 
12
23
  [cols="1,1,2"]
13
24
  |===
14
- |Issue |Status |Known + first moves
15
-
16
- |moxml#474 — parent-of-attribute (`./@id/..`) returns empty through the
17
- Ruby engine on the leptris adapter
18
- |Open (filed 2026-10-27 with probes)
19
- |The adapter routes parent-axis expressions to the Ruby engine
20
- (`REVERSE_AXES` in `adapter/leptris.rb`); that lane loses attribute
21
- inputs. The ENGINE answers correctly since leptris v1.9.385 (both eval
22
- paths). Easiest: widen the native gate for parent/ancestor-after-
23
- attribute paths; or fix `on_axis_parent` in `xpath/compiler.rb` for
24
- `Wrappers::Attribute` inputs (the wrappers carry `@parent_node`).
25
- Unblocks metanorma-standoc's `svg_uniqueids1`.
26
-
27
- |moxml#472 — `.//*[@class]` predicate segfaults the compiled evaluator
28
- |Open
29
- |Crash in `leptris_xpath_compiled_eval` (.ips on file); the
30
- `attribute::class` spelling does not crash. FIRST retest against
31
- leptris v1.9.385 — a corrupt-attribute-table class (the cross-doc
32
- adopt, leptris#1869) shipped fixed there and could be the fuel. If it
33
- still crashes: the VM's predicate lane (`src/leptris/xpath/vm.c`,
34
- attribute existence inside `[...]`). Production hit: standoc's
35
- `svg_classupdate1`.
36
-
37
- |moxml#473 — XSD compile of large occurrence products grows unbounded
38
- (jetsam SIGKILL, low RSS)
39
- |Open
40
- |W3C `particlesZ034_b.xsd` repro in the issue. The compiled automaton's
41
- product construction needs cardinality folding (`unbounded` inner terms
42
- to epsilon-loops) instead of enumeration.
25
+ |Item |Status |Known + first moves
26
+
27
+ |Floors raised (0.3.118)
28
+ |Shipped
29
+ |`leptris ~> 1.9.398`, `yeptris ~> 0.6.52`, `moxml ~> 0.6.0` — all
30
+ verified against exactly those engines (2744 examples, 0 failures, 25
31
+ pending). Constraints live in the gemspec only; Gemfile/Gemfile.local
32
+ are untracked verification lanes.
33
+
34
+ |Opal lane
35
+ |Retired
36
+ |moxml 0.6 deleted the Opal surface (moxml#516), so canon's opal
37
+ workflow, `spec:opal` task, `:opal` group, and smoke spec are gone.
38
+ The `RUBY_ENGINE == "opal"` branches in lib stay for the moxml-ts wasm
39
+ migration (moxml#489).
40
+
41
+ |Subset-xpath mini engine (`lib/canon/xml/xpath_engine.rb`)
42
+ |Reported, owner decision pending
43
+ |It silently returns `[]` for `..` and `@attr` step forms (XPath 1.0
44
+ §2.2 names the owner element). No `lib/` caller uses those forms today
45
+ (swept 2026-10-28); decide between implementing the steps and
46
+ documenting/raising on unsupported forms.
43
47
  |===
44
48
 
49
+ == lutaml/moxml
50
+
51
+ All three canon-filed engine issues are CLOSED by the moxml team —
52
+ #474 (parent-of-attribute through the Ruby engine), #472
53
+ (attribute-existence predicate segfault), #473 (unbounded occurrence
54
+ products at XSD compile). Nothing to pick up here; re-file against
55
+ moxml 0.6.x if the metanorma-standoc svg lanes regress.
56
+
45
57
  == leptris/leptris
46
58
 
47
59
  [cols="1,1,2"]
@@ -53,34 +65,17 @@ to epsilon-loops) instead of enumeration.
53
65
  |Shipped: the adopt copy's attribute-tail resync
54
66
  (`copy_subtree_detached`, `src/leptris/dom/element_modify.c`) and the
55
67
  evaluator-path parent-of-attribute (`apply_axis`,
56
- `src/leptris/xpath/evaluator_axes.c`). Pin:
57
- `AdoptKeepsMixedPlainAndNamespacedAttrs`. Re-verify downstream crash
58
- reports (moxml#472) against 1.9.385.
68
+ `src/leptris/xpath/evaluator_axes.c`).
59
69
 
60
- |leptris#1842 — C-face XML parse/gen/xpath ~3-4x behind pugixml
61
- |Open
62
- |Decomposed into #1846/#1854/#1855. Use the interleaved A/B harness.
63
-
64
- |leptris#1846 — parse gap is allocator-shaped (1.0x mingw -> 4.3x old
65
- Intel mac, same code)
66
- |Open, slice 3 pending
67
- |Allocation profile done (the issue's wave comment). ARENA
68
- RIGHT-SIZING with the interleaved harness — cross-wave comparison is
69
- INVALID (pugixml swung 1.7x between waves; only within-run interleaved
70
- A/B counts). A counting-malloc interposer via `DYLD_INTERPOSE` beats
71
- xctrace for parse loops. Prior art: `leptris-xsitype` worktree,
72
- branch `perf/1846-adopt-conversion-buffer`.
73
-
74
- |leptris#1854 — `to_xml` native emission: `FFI::Pointer#+` is 37% of
75
- the loop
76
- |Open
77
- |An address-Integer emission API (`uintptr_t` in/out, the #408 law);
78
- batch per subtree, not per node.
70
+ |leptris#1846/#1854/#1855 — the parse-allocator, pointer-emission, and
71
+ plan-path-FFI perf slices
72
+ |CLOSED (through v1.9.398)
73
+ |All three slices landed; the umbrella gap moved accordingly.
79
74
 
80
- |leptris#1855 — plan-path parse ~35% FFI materialization
81
- |Open
82
- |Batched child/string asks; mirror the `children_read` bulk face
83
- (leptris-ruby#530).
75
+ |leptris#1842 — C-face XML parse/gen/xpath vs pugixml
76
+ |Open (umbrella)
77
+ |Re-baseline against 1.9.398 with the interleaved A/B harness before
78
+ opening new slices — the old ~3-4x numbers predate the closed slices.
84
79
  |===
85
80
 
86
81
  == leptris/yeptris
@@ -121,12 +116,82 @@ has the trusted-into entries.
121
116
  |===
122
117
  |Issue |Status |Known + first moves
123
118
 
124
- |yeptris-ruby#322 — CBOR dump is marshaling-bound
125
- |Open
126
- |The JSON half shipped (the marshal face: 4.4x end-to-end). CBOR: a
127
- `yeptris_cbor_from_marshal`-style face, reusing the marshal reader's
128
- REGISTRY LAW and its pin (`test/unit/test_marshal_json.cpp`) — the
129
- registry law (who occupies an `@` slot) is the hard-won part; copy both.
119
+ |yeptris-ruby#322 — dump face is marshaling-bound
120
+ |CLOSED
121
+ |The marshal face shipped (4.4x end-to-end, yeptris 0.6.47/0.6.48; the
122
+ reader's REGISTRY LAW pinned in `test/unit/test_marshal_json.cpp`).
123
+ If the CBOR face reopens, copy the registry law and its pin wholesale.
124
+ |===
125
+
126
+ == lutaml/lutaml-model and the dependent legs
127
+
128
+ [cols="1,1,2"]
129
+ |===
130
+ |Item |Status |Known + first moves
131
+
132
+ |moxml 0.6 admission
133
+ |Shipped (0.8.155)
134
+ |`>= 0.5.139, < 0.7`; the Opal boot lane pins moxml 0.5.x locally in
135
+ `opal.yml` (Gemfile-append + plain `bundle update moxml` — bundler 4
136
+ removed `update --version`) until the moxml-ts wasm migration.
137
+
138
+ |update-baselines red on every main push
139
+ |PR lutaml-model#1076
140
+ |checkout's persisted Authorization extraheader collides with
141
+ create-pull-request's token ("Duplicate header: Authorization", HTTP
142
+ 400) on the action's `git remote prune`. Fix: `persist-credentials:
143
+ false` on that job's checkout (the documented pairing).
144
+
145
+ |metanorma/docbook dependent leg (ubuntu/macos)
146
+ |PR metanorma/docbook#15
147
+ |ferrum 0.20 rejects `file://` at boot (`parse_base_url` is
148
+ http/https-only); docbook's `Capybara.app_host = "file://"` died in a
149
+ `before(:suite)` hook with zero examples run (windows skips the boot).
150
+ Fix: loopback http app_host placeholder; the specs visit absolute
151
+ file:// URLs directly. Same PR carries the pre-existing rubocop debt
152
+ that failed docbook's own rake lane (dead `custom_data` captures).
153
+
154
+ |ukiryu dependent leg (macos)
155
+ |Transient — resolved
156
+ |`bundle add lutaml-model` exit 7: the runner's rubygems compact index
157
+ had not propagated yeptris 0.6.53.0 (released hours earlier; the
158
+ version EXISTS with full platform coverage). Passed on the next
159
+ dependent run.
160
+
161
+ |glossarist/iev dependent legs (all OSes) + iev's own rake lane
162
+ |RESOLVED (2026-11-01)
163
+ |The republished `plurimath 0.10.0` (sha `7b870bf0...`) required
164
+ `mml/configuration` at line 2 — an API no mml version ships; iev's
165
+ silent LoadError rescue turned that into 21x
166
+ `uninitialized constant Plurimath::Math` (diag: glossarist/iev#75,
167
+ filed as plurimath/plurimath#528). Fixed by the org-wide moxml-0.6
168
+ update (below): plurimath 0.10.0 yanked, omml released with
169
+ `moxml ~> 0.6.0`, so 0.11.12 resolves again. Full iev suite green
170
+ (489/0) on canon 0.3.118 + moxml 0.6.1 + omml 0.2.8 +
171
+ lutaml-model 0.8.156. iev#75 (the diag) is revert-on-sight.
172
+
173
+ **Gotcha for any release: a YANKED VERSION NUMBER STAYS INVISIBLE to
174
+ bundler's resolution index even after re-pushing the same number** —
175
+ omml 0.2.7 published, yanked, re-pushed identically, and bundler
176
+ still could not see it. Always release a FRESH patch number after a
177
+ yank (0.2.8).
178
+
179
+ |The org-wide moxml 0.6 sweep (owner call, 2026-11-01)
180
+ |Shipped
181
+ |Every org gem now rides the moxml 0.6 line: canon 0.3.118
182
+ (`~> 0.6.0`), omml 0.2.8, dcc 0.2.2, metanorma-standoc 3.5.5,
183
+ relaton 3.0.4, expressir (admits), lutaml-model 0.8.156 (admits
184
+ `< 0.7`), mml (unpinned). lutaml-xsd: owner PRs #214/#215. iev's
185
+ suite is the executable proof: 489/0 on the resolved modern stack.
186
+
187
+ |metanorma-standoc legs: parsanol 1.3.120 removed the `mode` alias
188
+ |Open — relaton-chain grammar follow-up
189
+ |`Parsanol::PARG::ParseError: the grammar header keyword is edition;
190
+ mode (the pre-1.3.113 alias) was removed` fires in
191
+ `@bibdb.fetch_async` (relaton bibdb chain) on standoc's fresh
192
+ resolutions. Some grammar file still says `mode`; move it to
193
+ `edition "v1"` / `edition "v2"` per the parsanol message. Separate
194
+ from moxml entirely.
130
195
  |===
131
196
 
132
197
  == Mechanics every team hits
@@ -146,6 +211,12 @@ interning varies per process).
146
211
  swung 1.7x between waves). Only within-run interleaved A/B on fresh
147
212
  binaries counts. The perf gate is best-of-N per side.
148
213
 
214
+ |Release cuts (canon)
215
+ |`gh workflow run release.yml -f next_version=patch` (patch only; new
216
+ minors/majors are the owner's stated call). The gem bump is committed
217
+ by the workflow. Gemfile.lock is gitignored — CI resolves fresh from
218
+ the gemspec, so constraint PRs are gemspec-only.
219
+
149
220
  |Release cuts (yeptris)
150
221
  |`next_version` must be a LITERAL X.Y.Z. The release PR self-closes ~2
151
222
  min after cut if checks never start: push a PARENTED trigger commit
@@ -165,6 +236,12 @@ its C `v<c_semver>` tag to EXIST first (platform legs vendor from it).
165
236
  |The same cut/trigger/approve cycle; the Unreleased section exists on
166
237
  main — keep it fed.
167
238
 
239
+ |Dependent legs (rake-with-tools)
240
+ |They run each downstream repo at its own main against lutaml-model's
241
+ branch — a red leg is usually the DOWNSTREAM repo's bug (ferrum boot,
242
+ stale locks), not lutaml-model's. Diagnose in the downstream repo and
243
+ PR there.
244
+
168
245
  |Formatting
169
246
  |The repos target clang-format 14+ (CI runs LLVM 18); local 11.1/22.1
170
247
  both reject the config — the CI format job is the gate.
data/lib/canon/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Canon
4
- VERSION = "0.3.118"
4
+ VERSION = "0.3.119"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: canon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.118
4
+ version: 0.3.119
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2026-10-31 00:00:00.000000000 Z
11
+ date: 2026-11-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: diff-lcs
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 1.9.398
47
+ version: 1.9.401
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: 1.9.398
54
+ version: 1.9.401
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: moxml
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -142,14 +142,14 @@ dependencies:
142
142
  requirements:
143
143
  - - "~>"
144
144
  - !ruby/object:Gem::Version
145
- version: 0.6.52
145
+ version: 0.6.54
146
146
  type: :runtime
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
150
  - - "~>"
151
151
  - !ruby/object:Gem::Version
152
- version: 0.6.52
152
+ version: 0.6.54
153
153
  description: |-
154
154
  Canon provides canonicalization and pretty-printing for various serialization
155
155
  formats (XML, HTML, JSON, YAML), producing standardized forms suitable for