lutaml-xsd 1.2.108 → 1.2.109
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 +4 -4
- data/TODO.conformance.md +86 -0
- data/lib/lutaml/xsd/validation/schema_definition_resolver.rb +18 -20
- data/lib/lutaml/xsd/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1b72159d7cf64cd93b73f0cc4e9801dfa46c57b4aba669421395ae0faa88cc6d
|
|
4
|
+
data.tar.gz: c6b1f7d7ecf76b6d9deb32ec13a261d70c87d7292c01be0f61e9b5ed0a1d0646
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6cfc032057ed3bbf9048ae3f0a8b8f9ff2b75eed8553e323089e3c79c1918ae883d3d16dd5dfb352e2f6ee63f2fee409865cbb93e7af36ed49d9ea41c9b1814f
|
|
7
|
+
data.tar.gz: d140656abba61dd935ae4ecc166d8f0dafa612d65a011c9acc56cf17e59393381dbcc5fe6888431094255e4b0762546da3f8320651c36fb3bd0eb01dc54d3585
|
data/TODO.conformance.md
CHANGED
|
@@ -513,6 +513,92 @@ tuple keys, node-set field violations and absent-field rows handled, cross-eleme
|
|
|
513
513
|
extension-base walks thread the deriving type namespace through.
|
|
514
514
|
STILL OPEN: schA1/schD10 (the hinted composition's CHILD value
|
|
515
515
|
checks bind the no-ns int ct-A to the ns-b boolean children —
|
|
516
|
+
- CHAMELEON FORM-DEFAULT ROUND (2026-11-11): +1 Schema (schD10;
|
|
517
|
+
suite 4641-effective of 4696 with 5 measurement-budget exclusions,
|
|
518
|
+
zero regressions from this round; rspec 1662 green; rubocop clean).
|
|
519
|
+
RESOLVED BY THE SPEC, not by owner coin-flip: XSD 1.0 §4.2.1
|
|
520
|
+
clause 3.2 converts ONLY the absent target namespace on a
|
|
521
|
+
chameleon include (an exhaustive enumeration: named components'
|
|
522
|
+
{target namespace} + wildcard {namespace constraint}); §3.2.2 and
|
|
523
|
+
§3.3.2 read elementFormDefault/attributeFormDefault from each
|
|
524
|
+
declaration's OWN <schema> ancestor — the chameleon document — so
|
|
525
|
+
the includer's form defaults NEVER apply (schD10: the
|
|
526
|
+
defaults-absent chameleon's group members stay unqualified beside
|
|
527
|
+
a qualified includer). index_schema threads the adopted namespace
|
|
528
|
+
down includes unchanged and every declaration now reads its own
|
|
529
|
+
document's defaults; the includer-defaults threading is removed.
|
|
530
|
+
ctE018 unaffected (its documents share identical defaults — only
|
|
531
|
+
the namespace adoption ever mattered). New resolver specs pin both
|
|
532
|
+
properties (namespace adoption + own-document defaults).
|
|
533
|
+
MEASUREMENT PROVENANCE for this round's ledger: batch 4400 was
|
|
534
|
+
assembled from a per-case subprocess sweep with a 90s watchdog —
|
|
535
|
+
45/45 measured pass, 5 excluded on budget
|
|
536
|
+
(Regex_w3c/reZ003v/005v/005i/006v/006i — the nested-repeat
|
|
537
|
+
instances drive our per-element walk into minutes-long quadratic
|
|
538
|
+
cost; reZ003v's verdict is probe-established true at 125s warm/
|
|
539
|
+
410s cold; the others unestablished). Batches 200 and 300 needed
|
|
540
|
+
re-runs: the morning worker's attO009/011 + attZ014a/b failures
|
|
541
|
+
were TRANSIENTS (fresh re-runs 50/50; isolated probes pass with
|
|
542
|
+
this round's tree) — most plausibly poisoned by the mid-run
|
|
543
|
+
lockfile churn. NON-ROUND FINDINGS registered below: the moxml
|
|
544
|
+
0.6.4 character-reference regression (train pinned back), the
|
|
545
|
+
schR2 stack overflow (masked by its expected-invalid expectation),
|
|
546
|
+
and the schG1/G4/G7 drift (fail in fresh isolation on origin/main
|
|
547
|
+
stash-verified — inputs/gems/ruby verified identical to the 4641
|
|
548
|
+
era; mechanism not isolated in-round; owner follow-up).
|
|
549
|
+
- SCH R2 STACK OVERFLOW (2026-11-11): Schema_w3c/schR2/schR2.i
|
|
550
|
+
(expected invalid) crashes the assessment with a SystemStackError
|
|
551
|
+
in lutaml-model 0.8.167's Base#resolved_element_order/
|
|
552
|
+
delete_deletables — an unguarded recursion over the cyclic
|
|
553
|
+
redefine graph schR2's documents build (called from our
|
|
554
|
+
collect_particles). The crash ESCAPES measure()'s rescue
|
|
555
|
+
(SystemStackError is not a StandardError); in every prior ledger
|
|
556
|
+
the case silently recorded as a pass via the crash-as-invalid
|
|
557
|
+
convention on its expected-invalid expectation, so the ledger
|
|
558
|
+
number never moved. Files/gems/ruby verified identical to the
|
|
559
|
+
baseline era; the crash reproduces in fresh single-case runs on
|
|
560
|
+
origin/main on both trains today. Finding for lutaml-model: a
|
|
561
|
+
cycle guard in resolved_element_order (our org's repo; owner
|
|
562
|
+
decides the upstream action).
|
|
563
|
+
- TRAIN ADOPTION REGRESSION — CHARACTER REFERENCES (2026-11-11):
|
|
564
|
+
the 2026-11-10 adoption verdict ("conformance-IDENTICAL") was
|
|
565
|
+
WRONG for one class: moxml 0.6.4 stopped decoding numeric
|
|
566
|
+
character references in attribute values. Minimal repro:
|
|
567
|
+
`Moxml::Context.new.parse('<x a="←"/>').root.attributes.
|
|
568
|
+
first.value` → "←" on moxml 0.6.2, literal "←" on 0.6.4.
|
|
569
|
+
Downstream this breaks the whole UNICODE-BLOCK pattern-facet
|
|
570
|
+
class — Regex_w3c Arrows/MathematicalOperators/
|
|
571
|
+
ArabicPresentationForms-A/CJKCompatibilityForms/
|
|
572
|
+
HalfwidthandFullwidthForms/Specials etc. validate on
|
|
573
|
+
moxml 0.6.2 + leptris 1.9.406.0 and fail on 0.6.4/1.9.415.0
|
|
574
|
+
(attribute_pattern_violation on character-reference values,
|
|
575
|
+
e.g. Regex_w3c/Arrows/Arrows.v). The adoption's 94-batch diff
|
|
576
|
+
compared TOTALS against the old-train baseline; the per-batch
|
|
577
|
+
regression class slipped through (baseline_4641's batch_04400
|
|
578
|
+
was 50/50 old-train). The pattern facet path itself is our Ruby
|
|
579
|
+
XsdRegex — the drift sits in the ENGINE's attribute-value
|
|
580
|
+
parsing. VERDICT: the measurement train is PINNED BACK to
|
|
581
|
+
moxml 0.6.2 + leptris 1.9.406.0 (the baseline's train; untracked
|
|
582
|
+
Gemfile.lock) until moxml restores character-reference decoding;
|
|
583
|
+
the finding goes to our moxml/leptris repos with the minimal
|
|
584
|
+
repro for the owner to act on. The 2026-11-10 adoption entry
|
|
585
|
+
above is superseded by this one.
|
|
586
|
+
- TRAIN ADOPTION (2026-11-10): the measurement train moves to
|
|
587
|
+
moxml 0.6.4 + leptris 1.9.415.0 (from the pin-back's 0.6.2 +
|
|
588
|
+
1.9.406.0; local Gemfile.lock only — untracked, and the gemspec
|
|
589
|
+
floors already admit both). VERDICT: conformance-IDENTICAL —
|
|
590
|
+
4640/4696 = 98.81%, zero regressions and zero fixes against the
|
|
591
|
+
verified 4640 baseline across all 94 batches. The moxml team's
|
|
592
|
+
wave report (#529 5 cases + #522 attgD 16/16 "fixed") does NOT
|
|
593
|
+
translate through our pipeline — the attgD/attgC survivors remain
|
|
594
|
+
failing identically on the new train; their facade verdicts and
|
|
595
|
+
our pipeline reading still disagree (registered, not chased).
|
|
596
|
+
A first adoption attempt measured on a STALE branch (pre-rounds
|
|
597
|
+
A-G) produced 198 phantom regressions — the tree, not the train;
|
|
598
|
+
discarded with the branch. The remaining register is unchanged:
|
|
599
|
+
schD10 (owner decision), the disputed/contested set, the
|
|
600
|
+
moxml-rs engine arcs.
|
|
601
|
+
|
|
516
602
|
'true' vs xsd:int — the per-child type plumbing under hint
|
|
517
603
|
- PARENT-CONTEXT ROUND G (2026-11-09): +1 Additional (addB188;
|
|
518
604
|
suite 4639->4640 = 98.81%, pending measure confirm). AN UNDECLARED
|
|
@@ -1037,27 +1037,30 @@ module Lutaml
|
|
|
1037
1037
|
end
|
|
1038
1038
|
|
|
1039
1039
|
def index_schema(index, schema, held_signatures = [],
|
|
1040
|
-
chameleon_namespace = nil
|
|
1041
|
-
chameleon_includer = nil)
|
|
1040
|
+
chameleon_namespace = nil)
|
|
1042
1041
|
# A no-namespace document reached through xs:include is a
|
|
1043
|
-
# chameleon: its
|
|
1044
|
-
#
|
|
1042
|
+
# chameleon: ONLY its absent target namespace converts to the
|
|
1043
|
+
# includer's (XSD 1.0 §4.2.1 clause 3.2). Form and derivation
|
|
1044
|
+
# defaults are read from each declaration's OWN <schema>
|
|
1045
|
+
# ancestor — the chameleon document — because §3.2.2/§3.3.2
|
|
1046
|
+
# map form against the <schema> ancestor of the declaration,
|
|
1047
|
+
# which the namespace conversion never replaces (schD10:
|
|
1048
|
+
# unprefixed group members of a defaults-absent chameleon
|
|
1049
|
+
# stay unqualified beside a qualified includer).
|
|
1045
1050
|
raw_namespace = schema.target_namespace
|
|
1046
1051
|
chameleon = raw_namespace.to_s.empty? && chameleon_namespace
|
|
1047
1052
|
namespace = chameleon ? chameleon_namespace : raw_namespace
|
|
1048
|
-
defaults_schema = chameleon ? chameleon_includer : schema
|
|
1049
1053
|
register_ref_namespaces(schema)
|
|
1050
1054
|
Array(schema.element).each do |element|
|
|
1051
|
-
index_element(index, element, namespace, :top,
|
|
1055
|
+
index_element(index, element, namespace, :top, schema)
|
|
1052
1056
|
# A global element's INLINE complexType carries local
|
|
1053
1057
|
# attribute declarations too — their form resolution was
|
|
1054
1058
|
# only indexed for named types (idG027/idH025).
|
|
1055
|
-
index_local_attributes(element.complex_type, namespace,
|
|
1056
|
-
defaults_schema)
|
|
1059
|
+
index_local_attributes(element.complex_type, namespace, schema)
|
|
1057
1060
|
end
|
|
1058
1061
|
Array(schema.complex_type).each do |complex_type|
|
|
1059
1062
|
index_type(index, complex_type, namespace, schema)
|
|
1060
|
-
index_local_attributes(complex_type, namespace,
|
|
1063
|
+
index_local_attributes(complex_type, namespace, schema)
|
|
1061
1064
|
end
|
|
1062
1065
|
Array(schema.attribute).each do |attribute|
|
|
1063
1066
|
index_attribute(attribute, namespace)
|
|
@@ -1070,13 +1073,12 @@ module Lutaml
|
|
|
1070
1073
|
# (wildZ013c), a named document's against its own.
|
|
1071
1074
|
@namespaces[group] = namespace unless name.empty?
|
|
1072
1075
|
Array(group.attribute).each do |member|
|
|
1073
|
-
index_local_attribute(member, namespace,
|
|
1076
|
+
index_local_attribute(member, namespace, schema)
|
|
1074
1077
|
end
|
|
1075
1078
|
end
|
|
1076
1079
|
Array(schema.group).each do |group|
|
|
1077
1080
|
each_particle_element(group, schema) do |element|
|
|
1078
|
-
index_element(index, element, namespace, :inline,
|
|
1079
|
-
defaults_schema)
|
|
1081
|
+
index_element(index, element, namespace, :inline, schema)
|
|
1080
1082
|
end
|
|
1081
1083
|
end
|
|
1082
1084
|
# lutaml-model nests resolved xs:import / xs:include targets
|
|
@@ -1088,8 +1090,7 @@ module Lutaml
|
|
|
1088
1090
|
next unless nested.is_a?(Lutaml::Xml::Schema::Xsd::Schema)
|
|
1089
1091
|
next if held_signatures.include?(schema_signature(nested))
|
|
1090
1092
|
|
|
1091
|
-
index_schema(index, nested, held_signatures, namespace
|
|
1092
|
-
defaults_schema)
|
|
1093
|
+
index_schema(index, nested, held_signatures, namespace)
|
|
1093
1094
|
end
|
|
1094
1095
|
Array(schema.import).each do |nested|
|
|
1095
1096
|
next unless nested.is_a?(Lutaml::Xml::Schema::Xsd::Schema)
|
|
@@ -1107,8 +1108,7 @@ module Lutaml
|
|
|
1107
1108
|
# indexed under the name (attgC007/attgD036). Runs after the
|
|
1108
1109
|
# nested descent so included declarations are already in.
|
|
1109
1110
|
Array(schema.redefine).each do |red|
|
|
1110
|
-
index_redefine(index, schema, red, held_signatures, namespace
|
|
1111
|
-
defaults_schema)
|
|
1111
|
+
index_redefine(index, schema, red, held_signatures, namespace)
|
|
1112
1112
|
end
|
|
1113
1113
|
end
|
|
1114
1114
|
|
|
@@ -1120,8 +1120,7 @@ module Lutaml
|
|
|
1120
1120
|
# declaration is kept for that hook and the redefining body
|
|
1121
1121
|
# indexed under the name (attgC007/attgD036). Runs after the
|
|
1122
1122
|
# nested descent so included declarations are already in.
|
|
1123
|
-
def index_redefine(index, schema, red, held_signatures, namespace
|
|
1124
|
-
defaults_schema)
|
|
1123
|
+
def index_redefine(index, schema, red, held_signatures, namespace)
|
|
1125
1124
|
target_path = nil
|
|
1126
1125
|
base = begin
|
|
1127
1126
|
File.dirname(@repository.source_path_for(schema))
|
|
@@ -1138,8 +1137,7 @@ module Lutaml
|
|
|
1138
1137
|
File.read(target_path), location: target_path
|
|
1139
1138
|
)
|
|
1140
1139
|
@redefined_targets << target
|
|
1141
|
-
index_schema(index, target, held_signatures, namespace
|
|
1142
|
-
defaults_schema)
|
|
1140
|
+
index_schema(index, target, held_signatures, namespace)
|
|
1143
1141
|
rescue StandardError
|
|
1144
1142
|
nil
|
|
1145
1143
|
end
|
data/lib/lutaml/xsd/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: lutaml-xsd
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.109
|
|
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-11-
|
|
11
|
+
date: 2026-11-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: liquid
|