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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: def3662a0159985a83f7dfe3244fcf778009f73059f3f91546d27c82028c428d
4
- data.tar.gz: 8e6407ce1e77da3ad839336277b24261be296780deab6fd46e63a220e9839909
3
+ metadata.gz: 1b72159d7cf64cd93b73f0cc4e9801dfa46c57b4aba669421395ae0faa88cc6d
4
+ data.tar.gz: c6b1f7d7ecf76b6d9deb32ec13a261d70c87d7292c01be0f61e9b5ed0a1d0646
5
5
  SHA512:
6
- metadata.gz: e6edc35350a096757383191fde7c38feb709c9dcc456375aab169b55b82d86ad8d9eb56c21879b31c1f5cac455da9fdfe756b76c269e30698af711deeb409ef9
7
- data.tar.gz: 6716b5ade73417dfe2b9726f092fb823e8cd8c63052481a85542c62eaec6771b1efa3f42287ccd07238836ab414595a526dba467589bea499690ce406aa68dd5
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="&#x2190;"/>').root.attributes.
568
+ first.value` → "←" on moxml 0.6.2, literal "&#x2190;" 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 declarations adopt the includer's target
1044
- # namespace AND form/derivation defaults (ctE018).
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, defaults_schema)
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, defaults_schema)
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, defaults_schema)
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
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Lutaml
4
4
  module Xsd
5
- VERSION = "1.2.108"
5
+ VERSION = "1.2.109"
6
6
  end
7
7
  end
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.108
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-10 00:00:00.000000000 Z
11
+ date: 2026-11-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: liquid