From 66184727d057188a72582c4486b8aeedef374390 Mon Sep 17 00:00:00 2001 From: Stefan Ziegler Date: Fri, 6 Nov 2026 21:18:05 +0100 Subject: [PATCH 1/4] Verify the pinned suite-interlis source inventory From 96d677c659509e6dccf952a37b49b25f714eae83 Mon Sep 17 00:00:00 2001 From: Stefan Ziegler Date: Fri, 6 Nov 2026 21:36:07 +0100 Subject: [PATCH 2/4] Catalog the pinned suite-interlis validator cases --- testdata/reference/suite-interlis/cases.json | 3021 +++++++++++++++++ tools/iox-reference-harness/README.md | 27 + .../iox-reference-harness/suite_inventory.py | 324 ++ .../test_suite_inventory.py | 108 + 4 files changed, 3480 insertions(+) create mode 100644 testdata/reference/suite-interlis/cases.json create mode 100644 tools/iox-reference-harness/suite_inventory.py create mode 100644 tools/iox-reference-harness/test_suite_inventory.py diff --git a/testdata/reference/suite-interlis/cases.json b/testdata/reference/suite-interlis/cases.json new file mode 100644 index 00000000..64a6dc47 --- /dev/null +++ b/testdata/reference/suite-interlis/cases.json @@ -0,0 +1,3021 @@ +{ + "schema": 1, + "upstream": { + "url": "https://github.com/geostandards-ch/suite-interlis", + "commit": "f30711184d2374feacb81c5742382d35597164ca", + "transferVersion": "2.3", + "routineProfiles": { + "ilivalidator": "1.11.14", + "ig/check": "2018.0.695" + } + }, + "models": { + "data/models/CHBase_Part1_GEOMETRY_V1.ili": "eb5b71a587d1166c9875136bdd0d67716828e339a26700b8941e27bd3527d046", + "data/models/CoordSys-20151124.ili": "83aabeb859bce848328aebd30ca371d8c115883f4afa8ea26db003ae27668155", + "data/models/INTERLIS_ext.ili": "58f6ad4af64200db20cf0e876def626203b2559da7f9c3887ce9532ffefb77cb", + "data/models/Roads.ili": "bd772a543d0bf49538e645ded365240142524138f8b5a091ad69ecad99269f18", + "data/models/RoadsExt.ili": "3b3f1f1eed2b507fe1be5a3bd054aeb53e23de6d8c405ab7f26aec3a8e972c9d", + "data/models/TestSuite.ili": "0df644ba25e3fdbc94c3d22d5f20e5758f19011256c8c7063d9e88d95af47861", + "data/models/TestSuite2.ili": "1409fa0fbdd7be4950b6f6b021c34ae92d836cea4d24f626aab67b74f7a16f9a", + "data/models/Units-20120220.ili": "ae3dac9207af40fee5e8737f86fba4e41d814198101d13280e8e983ab5972840", + "data/models/areAreas_ext.ili": "4d3adaaf77e6540970fbed599c52dd8e561298ceb1d4ae89caeaa9e7d9299ba7" + }, + "modelSets": { + "suite": [ + "data/models/TestSuite.ili", + "data/models/TestSuite2.ili" + ], + "suite2": [ + "data/models/TestSuite2.ili" + ], + "roads": [ + "data/models/Roads.ili", + "data/models/RoadsExt.ili" + ], + "areaExtensions": [ + "data/models/CHBase_Part1_GEOMETRY_V1.ili", + "data/models/CoordSys-20151124.ili", + "data/models/INTERLIS_ext.ili", + "data/models/Units-20120220.ili", + "data/models/areAreas_ext.ili" + ] + }, + "cases": [ + { + "id": "RAt.T01a", + "xtf": "data/RAt.T01a.xtf", + "sha256": "8ad9c44724721d08293dbfefcff322a585c66b76c1162cd218d71320fe778c94", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.2"], + "norm": {"sections": ["2.6", "3.3.11"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T01a", "line": 43}, + "documentation": {"path": "doc/attributes.md", "line": 18, "expectedAcceptance": false} + }, + { + "id": "RAt.T02a", + "xtf": "data/RAt.T02a.xtf", + "sha256": "52a9af514ba6936a58db589c68988437521be743b38a55965a03fdc69bed2e5f", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.1", "3.3.11.2"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T02a", "line": 64}, + "documentation": {"path": "doc/attributes.md", "line": 27, "expectedAcceptance": true} + }, + { + "id": "RAt.T02b", + "xtf": "data/RAt.T02b.xtf", + "sha256": "f622ce0670f17d25b6d922abe1d93650c3cf6467100c101efddddaa7666100eb", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.1", "3.3.11.2"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T02b", "line": 85}, + "documentation": {"path": "doc/attributes.md", "line": 27, "expectedAcceptance": false} + }, + { + "id": "RAt.T02c", + "xtf": "data/RAt.T02c.xtf", + "sha256": "bade7ddd51550e7632567c8973117daba5095875ab65377dd35f7522a83f6b3f", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.1", "3.3.11.2"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T02c", "line": 106}, + "documentation": {"path": "doc/attributes.md", "line": 27, "expectedAcceptance": false} + }, + { + "id": "RAt.T03a", + "xtf": "data/RAt.T03a.xtf", + "sha256": "420a64435a89095fbf82f031691818dc457023becb0fa01bf71a1f9862f3b1d7", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.1", "3.3.11.2"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T03a", "line": 128}, + "documentation": {"path": "doc/attributes.md", "line": 36, "expectedAcceptance": false} + }, + { + "id": "RAt.T03b", + "xtf": "data/RAt.T03b.xtf", + "sha256": "8ca8957c4510e6284f7ad70609420b01fbaba55d3a4c1a8b5ec25e9140a01133", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.1", "3.3.11.2"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T03b", "line": 150}, + "documentation": {"path": "doc/attributes.md", "line": 36, "expectedAcceptance": true} + }, + { + "id": "RAt.T04a", + "xtf": "data/RAt.T04a.xtf", + "sha256": "bb7c19f0d2199115e53d14ab760cb3c2cacc73d35ea71e6152b1fec03b16757f", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.2.2", "2.2.7", "2.6", "2.8.1", "3.3.11.2"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T04a", "line": 171}, + "documentation": {"path": "doc/attributes.md", "line": 45, "expectedAcceptance": false} + }, + { + "id": "RAt.T04b", + "xtf": "data/RAt.T04b.xtf", + "sha256": "1e06e3ded3dfb8cdf2ec33c0c653e2bc9f41a35cd145d5fe9aa2bc4c3798390d", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.2.2", "2.2.7", "2.6", "2.8.1", "3.3.11.2"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T04b", "line": 192}, + "documentation": {"path": "doc/attributes.md", "line": 45, "expectedAcceptance": false} + }, + { + "id": "RAt.T04c", + "xtf": "data/RAt.T04c.xtf", + "sha256": "16b5b7f261d40e6b46d8abe389da1153e6cc94913de47421c9416fdeedab2347", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.2.2", "2.2.7", "2.6", "2.8.1", "3.3.11.2"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T04c", "line": 213}, + "documentation": {"path": "doc/attributes.md", "line": 45, "expectedAcceptance": false} + }, + { + "id": "RAt.T05a", + "xtf": "data/RAt.T05a.xtf", + "sha256": "35d1d826e53931ab6b44d129e75872823d8ba9564aa94b589447f17730c94660", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.1", "3.3.11.2"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T05a", "line": 234}, + "documentation": {"path": "doc/attributes.md", "line": 54, "expectedAcceptance": false} + }, + { + "id": "RAt.T05b", + "xtf": "data/RAt.T05b.xtf", + "sha256": "0757f68ad56c3d8fe409e1c6c1c2ffb2fdf236475d81e227282d6003ee779d72", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.1", "3.3.11.2"], "openDecision": "Confirm relative data URI semantics. Decision 10 covers the model publisher URI."}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T05b", "line": 255}, + "documentation": {"path": "doc/attributes.md", "line": 54, "expectedAcceptance": false} + }, + { + "id": "RAt.T06a", + "xtf": "data/RAt.T06a.xtf", + "sha256": "ee9174a7019b9a1562e9491f30492771c4c91584539048b0a4538d48b792f3b1", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.1", "3.3.11.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T06a", "line": 275}, + "documentation": {"path": "doc/attributes.md", "line": 63, "expectedAcceptance": false} + }, + { + "id": "RAt.T06b", + "xtf": "data/RAt.T06b.xtf", + "sha256": "2dfab7e836c5a6828aed73a12dc1c70e4c28689db2d666b87f330d09fa4cc3a2", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.1", "3.3.11.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T06b", "line": 295}, + "documentation": {"path": "doc/attributes.md", "line": 63, "expectedAcceptance": false} + }, + { + "id": "RAt.T06c", + "xtf": "data/RAt.T06c.xtf", + "sha256": "702a9419f81321103c28a933a40715c57103ae440dce8e8727dfac8adf51c1be", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.1", "3.3.11.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T06c", "line": 315}, + "documentation": {"path": "doc/attributes.md", "line": 63, "expectedAcceptance": false} + }, + { + "id": "RAt.T07a", + "xtf": "data/RAt.T07a.xtf", + "sha256": "b2b51a507602a0314ba12d358dbf6a2f01388a3ed83094f1a0cfec228cd7b677", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.1", "3.3.11.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T07a", "line": 335}, + "documentation": {"path": "doc/attributes.md", "line": 72, "expectedAcceptance": false} + }, + { + "id": "RAt.T07b", + "xtf": "data/RAt.T07b.xtf", + "sha256": "9e01a8cf4137b09a7327bdd3030ca6ebe683d257716d5b2ed5ffa3c9edcf29c2", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.1", "3.3.11.3"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T07b", "line": 355}, + "documentation": {"path": "doc/attributes.md", "line": 72, "expectedAcceptance": true} + }, + { + "id": "RAt.T08a", + "xtf": "data/RAt.T08a.xtf", + "sha256": "12339ea24e5ce1d698579949af078976fd6a37c254bec88ffe3cf36771de09aa", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.8.4", "3.3.11.3"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T08a", "line": 375}, + "documentation": {"path": "doc/attributes.md", "line": 81, "expectedAcceptance": true} + }, + { + "id": "RAt.T08b", + "xtf": "data/RAt.T08b.xtf", + "sha256": "0cd7b81cc6e815c02b759ec68b8b87e5d5663abce9e600cb4ae1bf5e4d442244", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.8.4", "3.3.11.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T08b", "line": 395}, + "documentation": {"path": "doc/attributes.md", "line": 81, "expectedAcceptance": false} + }, + { + "id": "RAt.T09a", + "xtf": "data/RAt.T09a.xtf", + "sha256": "cc9bca8c08548d4b96e3f7d046f93a0e483ff4750fe9030f220abae4cca6ffe5", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.5", "3.3.11.4"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T09a", "line": 415}, + "documentation": {"path": "doc/attributes.md", "line": 90, "expectedAcceptance": true} + }, + { + "id": "RAt.T09b", + "xtf": "data/RAt.T09b.xtf", + "sha256": "8e0f3ed150056337005045f70cf4766bbbb0358796fae8e5c82e774ad9411f7c", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.5", "3.3.11.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T09b", "line": 435}, + "documentation": {"path": "doc/attributes.md", "line": 90, "expectedAcceptance": false} + }, + { + "id": "RAt.T09c", + "xtf": "data/RAt.T09c.xtf", + "sha256": "2016fd59f46243fdf61383290d251e91d156097f9daf559784523fde7a867eb6", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.5", "3.3.11.4"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T09c", "line": 455}, + "documentation": {"path": "doc/attributes.md", "line": 90, "expectedAcceptance": true} + }, + { + "id": "RAt.T09d", + "xtf": "data/RAt.T09d.xtf", + "sha256": "96cc828c4e76fc6e1c7013c70b208f187ac3ea6207fb8b18485bd1b0a9813280", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.2"], + "norm": {"sections": ["2.6", "2.8.5", "3.3.11.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T09d", "line": 475}, + "documentation": {"path": "doc/attributes.md", "line": 90, "expectedAcceptance": false} + }, + { + "id": "RAt.T09e", + "xtf": "data/RAt.T09e.xtf", + "sha256": "17558c051201e0779802ae5ef47a3aa9eca2fd33543abb23a7e0931b5bbeb8ef", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.5", "3.3.11.4"], "openDecision": "Confirm precision reduction at the upper domain bound against the actual input and section 2.8.5."}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T09e", "line": 495}, + "documentation": {"path": "doc/attributes.md", "line": 90, "expectedAcceptance": true}, + "notes": ["The English result row names 10000.1. The actual attribute is 10000.01 (XTF line 23)."] + }, + { + "id": "RAt.T09f", + "xtf": "data/RAt.T09f.xtf", + "sha256": "866d83652d54e20c7464719349b6167dc50244aca152f7a84649966e29880c7c", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.5", "3.3.11.4"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T09f", "line": 515}, + "documentation": {"path": "doc/attributes.md", "line": 90, "expectedAcceptance": true} + }, + { + "id": "RAt.T09g", + "xtf": "data/RAt.T09g.xtf", + "sha256": "95aa51b5dad21f44c0f2e28a0c4e692e72425eea6a260104181d03159393f2dc", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.5", "3.3.11.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T09g", "line": 535}, + "documentation": {"path": "doc/attributes.md", "line": 90, "expectedAcceptance": false} + }, + { + "id": "RAt.T09h", + "xtf": "data/RAt.T09h.xtf", + "sha256": "6b573fc33dd6575e2fab8b004906616c0cb6372a574e6b0ccc016639ffa01e36", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.5", "3.3.11.4"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T09h", "line": 555}, + "documentation": {"path": "doc/attributes.md", "line": 90, "expectedAcceptance": true} + }, + { + "id": "RAt.T10a", + "xtf": "data/RAt.T10a.xtf", + "sha256": "c496c3ebb6494291226561d807eee58299802210c41eaf458ae4eb911261c457", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.6", "2.8.7", "3.3.11.5"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T10a", "line": 575}, + "documentation": {"path": "doc/attributes.md", "line": 99, "expectedAcceptance": false} + }, + { + "id": "RAt.T10b", + "xtf": "data/RAt.T10b.xtf", + "sha256": "a8a4da8f7d14faf98a9598075954d25294f71d7172e7709179b19e77b6c2da2d", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.6", "2.8.7", "3.3.11.5"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T10b", "line": 595}, + "documentation": {"path": "doc/attributes.md", "line": 99, "expectedAcceptance": false} + }, + { + "id": "RAt.T10c", + "xtf": "data/RAt.T10c.xtf", + "sha256": "4e063bb793c1c98f0adf6203a2d521920e4268b55b56fc6f5e5706e261a5698c", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.4"], + "norm": {"sections": ["2.6", "2.8.6", "2.8.7", "3.3.11.5"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T10c", "line": 615}, + "documentation": {"path": "doc/attributes.md", "line": 99, "expectedAcceptance": false}, + "notes": ["XTF comment names RAt.T10a. The stable ID comes from the Java test."] + }, + { + "id": "RAt.T11a", + "xtf": "data/RAt.T11a.xtf", + "sha256": "517ecc2d0664e8611a570958748a5612fe8c6857f8c3b9071f3dbb2532677035", + "modelSet": "suite2", + "ruleGroup": "object-identity", + "phases": ["P4.4"], + "norm": {"sections": ["2.8.9", "3.3.1", "3.3.6", "3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T11a", "line": 636}, + "documentation": {"path": "doc/attributes.md", "line": 108, "expectedAcceptance": false}, + "notes": ["TestSuite2 uses OID declarations without CONTRACTED. Compiler decision 01 covers that model declaration."] + }, + { + "id": "RAt.T11b", + "xtf": "data/RAt.T11b.xtf", + "sha256": "56409f5738de6986f5ad36474cac52953ae0278c5f5bed32518ceb0de05f6769", + "modelSet": "suite2", + "ruleGroup": "object-identity", + "phases": ["P4.4"], + "norm": {"sections": ["2.8.9", "3.3.1", "3.3.6", "3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T11b", "line": 657}, + "documentation": {"path": "doc/attributes.md", "line": 108, "expectedAcceptance": false}, + "notes": ["TestSuite2 uses OID declarations without CONTRACTED. Compiler decision 01 covers that model declaration."] + }, + { + "id": "RAt.T11c", + "xtf": "data/RAt.T11c.xtf", + "sha256": "2715ccc88da823b39665b8ff0cf437d81bb191742e4efa086aca41d307194dad", + "modelSet": "suite", + "ruleGroup": "object-identity", + "phases": ["P4.2", "P4.4"], + "norm": {"sections": ["2.8.9", "3.3.1", "3.3.11.16"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T11c", "line": 678}, + "documentation": {"path": "doc/attributes.md", "line": 108, "expectedAcceptance": true} + }, + { + "id": "RAt.T11d", + "xtf": "data/RAt.T11d.xtf", + "sha256": "a1c4d53ca11c3b14670f3b9efd4223be288d8983664755c331c121845d390df7", + "modelSet": "suite", + "ruleGroup": "object-identity", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.9", "3.3.1", "3.3.11.16"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T11d", "line": 699}, + "documentation": {"path": "doc/attributes.md", "line": 108, "expectedAcceptance": false} + }, + { + "id": "RAt.T11e", + "xtf": "data/RAt.T11e.xtf", + "sha256": "584519b3cd43ad5ba3f7f22371d4f104c30bfb8c5800effe4519c20ccea7edc4", + "modelSet": "suite", + "ruleGroup": "object-identity", + "phases": ["P4.4"], + "norm": {"sections": ["2.8.9", "3.3.1", "3.3.6", "3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T11e", "line": 720}, + "documentation": {"path": "doc/attributes.md", "line": 108, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ig/check", "reason": "Diagnostic differs from the expected OID rejection.", "active": true}] + }, + { + "id": "RAt.T11f", + "xtf": "data/RAt.T11f.xtf", + "sha256": "ef16c8d3dae32f35e25b2016de88c8390445bf9a82467ce2a829b65f5333043f", + "modelSet": "suite", + "ruleGroup": "object-identity", + "phases": ["P4.4"], + "norm": {"sections": ["2.8.9", "3.3.1", "3.3.6", "3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T11f", "line": 742}, + "documentation": {"path": "doc/attributes.md", "line": 108, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ig/check", "reason": "Diagnostic differs from the expected OID rejection.", "active": true}] + }, + { + "id": "RAt.T12a", + "xtf": "data/RAt.T12a.xtf", + "sha256": "f2a0a08da69a61ba0fcdee590829433d633df74d5ce3c6a54cbf3cf0dec59f77", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.2"], + "norm": {"sections": ["2.6", "2.8.10", "3.3.11.6"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T12a", "line": 764}, + "documentation": {"path": "doc/attributes.md", "line": 117, "expectedAcceptance": true} + }, + { + "id": "RAt.T12b", + "xtf": "data/RAt.T12b.xtf", + "sha256": "eef74bbf87e3f6bf468c5c7ea9d4b9fdd9f76a5a8dc72d2509837a83d4d47b9a", + "modelSet": "suite", + "ruleGroup": "attribute-value", + "phases": ["P4.2"], + "norm": {"sections": ["2.6", "2.8.10", "3.3.11.6"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T12b", "line": 783}, + "documentation": {"path": "doc/attributes.md", "line": 117, "expectedAcceptance": false}, + "notes": ["XTF comment names RAt.T12a. The stable ID comes from the Java test."] + }, + { + "id": "RBe.T01a", + "xtf": "data/RBe.T01a.xtf", + "sha256": "4b8faa098f44ef959f2c32678b19868b1447ca65ea085cfed3901e436438a87e", + "modelSet": "suite", + "ruleGroup": "association-target", + "phases": ["P4.2", "P4.4"], + "norm": {"sections": ["3.3.9.2"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "RBe_T01a", "line": 44}, + "documentation": {"path": "doc/associations.md", "line": 17, "expectedAcceptance": true} + }, + { + "id": "RBe.T01b", + "xtf": "data/RBe.T01b.xtf", + "sha256": "980d822664c417fe3d7f89d6a6912ef7bcdf4e47f6edeed4cfcc5cb76e4230be", + "modelSet": "suite", + "ruleGroup": "association-target", + "phases": ["P4.2", "P4.4"], + "norm": {"sections": ["3.3.9.2"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "RBe_T01b", "line": 65}, + "documentation": {"path": "doc/associations.md", "line": 17, "expectedAcceptance": false} + }, + { + "id": "RBe.T01c", + "xtf": "data/RBe.T01c.xtf", + "sha256": "7334b3287acf1d386a766dbefa2aec09bc4676a15257e01a298b3ec1e9d7f96b", + "modelSet": "suite", + "ruleGroup": "association-target", + "phases": ["P4.2", "P4.4"], + "norm": {"sections": ["3.3.9.2"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "RBe_T01c", "line": 86}, + "documentation": {"path": "doc/associations.md", "line": 17, "expectedAcceptance": true} + }, + { + "id": "RBe.T01d", + "xtf": "data/RBe.T01d.xtf", + "sha256": "bb72fc99c6026be475b423cb985cdb0b427b25614c71ad3c800880ffe4ba203c", + "modelSet": "suite", + "ruleGroup": "association-target", + "phases": ["P4.2", "P4.4"], + "norm": {"sections": ["3.3.9.2"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "RBe_T01d", "line": 107}, + "documentation": {"path": "doc/associations.md", "line": 17, "expectedAcceptance": false} + }, + { + "id": "RBk.T01a", + "xtf": "data/RBk.T01a.xtf", + "sha256": "b1813ee88c0e4eeca911bff280082bfa26cb472a65c48aed434d60b7600691f3", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "RBk_T01a", "line": 275}, + "documentation": {"path": "doc/associations.md", "line": 62, "expectedAcceptance": false} + }, + { + "id": "RBk.T01b", + "xtf": "data/RBk.T01b.xtf", + "sha256": "0b41c75b8ba859ca765f28267e803fdb18807fd68daae1b916ff4476921d939f", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "RBk_T01b", "line": 296}, + "documentation": {"path": "doc/associations.md", "line": 62, "expectedAcceptance": true} + }, + { + "id": "RBk.T02a", + "xtf": "data/RBk.T02a.xtf", + "sha256": "a7e0fe26e11f8092bd2b1d9d498db78fe18f421deccc12a68fa58336d24f3af2", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "RBk_T02a", "line": 317}, + "documentation": {"path": "doc/associations.md", "line": 71, "expectedAcceptance": true} + }, + { + "id": "RBk.T02b", + "xtf": "data/RBk.T02b.xtf", + "sha256": "681560ed6bf5af28b4b2463a3a1cdbd3bf49af99affa4d057e143e4059849bc3", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "RBk_T02b", "line": 338}, + "documentation": {"path": "doc/associations.md", "line": 71, "expectedAcceptance": false} + }, + { + "id": "RBk.T03a", + "xtf": "data/RBk.T03a.xtf", + "sha256": "2cee983a8ed1fb9545b78256e815cd600f703f024f6acb0fd2e8c449a4f108cd", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "RBk_T03a", "line": 359}, + "documentation": {"path": "doc/associations.md", "line": 80, "expectedAcceptance": true} + }, + { + "id": "RBk.T03b", + "xtf": "data/RBk.T03b.xtf", + "sha256": "1e8a70a116b1456404570287124a7bb5ab61db8ca8d30be0034c7a6f3a157175", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "RBk_T03b", "line": 380}, + "documentation": {"path": "doc/associations.md", "line": 80, "expectedAcceptance": false} + }, + { + "id": "RBk.T03c", + "xtf": "data/RBk.T03c.xtf", + "sha256": "f14721471069a04551fa1d602bc102d3fdc8a0bd33cc26a38fdcb65c8e3bbd5a", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2", "P4.4"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "RBk_T03c", "line": 401}, + "documentation": {"path": "doc/associations.md", "line": 80, "expectedAcceptance": false} + }, + { + "id": "RBk.T03d", + "xtf": "data/RBk.T03d.xtf", + "sha256": "12d678aa1d5fb6a6c1183e9d315b42a71990eb8b5882b6c3a1d2aa5cd33bbfe0", + "modelSet": "suite", + "ruleGroup": "association-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.7.1", "3.3.9"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "RBk_T03d", "line": 422}, + "documentation": {"path": "doc/associations.md", "line": 80, "expectedAcceptance": false} + }, + { + "id": "RCO.T01a", + "xtf": "data/RCO.T01a.xtf", + "sha256": "dc22f8100a43a5fff6711e8a9f05d190c89e5eeec828f1e70a0d0a18a3f25382", + "modelSet": "suite", + "ruleGroup": "coordinate", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.8", "3.3.11.11"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CoordinateAttributeTest.java", "method": "RCO_T01a", "line": 43}, + "documentation": {"path": "doc/attributes.md", "line": 163, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ilivalidator", "reason": "NullPointerException reported.", "active": true}] + }, + { + "id": "RCO.T02a", + "xtf": "data/RCO.T02a.xtf", + "sha256": "c2d9eca2872b86ba8320ba7f4a929666cf9b3ca9903be66ff073c2d1966e46f2", + "modelSet": "suite", + "ruleGroup": "coordinate", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.8", "3.3.11.11"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CoordinateAttributeTest.java", "method": "RCO_T02a", "line": 65}, + "documentation": {"path": "doc/attributes.md", "line": 172, "expectedAcceptance": false} + }, + { + "id": "RCO.T02b", + "xtf": "data/RCO.T02b.xtf", + "sha256": "b6517b94031c92eaaab85dc7f5990301cd2e9517c36b1df129e95a8cea41d5e3", + "modelSet": "suite", + "ruleGroup": "coordinate", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.8", "3.3.11.11"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CoordinateAttributeTest.java", "method": "RCO_T02b", "line": 85}, + "documentation": {"path": "doc/attributes.md", "line": 172, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ilivalidator", "reason": "Java comment reports NullPointerException. The routine README reports a hang.", "active": true}] + }, + { + "id": "RCO.T03a", + "xtf": "data/RCO.T03a.xtf", + "sha256": "3a9594927b6d9c4299b2406a49a121440a20a28f0cd44d72e40478fb2dd1aef7", + "modelSet": "suite", + "ruleGroup": "coordinate", + "phases": ["P4.4"], + "norm": {"sections": ["2.8.8", "3.3.11.11"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CoordinateAttributeTest.java", "method": "RCO_T03a", "line": 107}, + "documentation": {"path": "doc/attributes.md", "line": 181, "expectedAcceptance": false} + }, + { + "id": "RCO.T03b", + "xtf": "data/RCO.T03b.xtf", + "sha256": "a31781003d45853f63f6341d740c5af664c209b57554368bb618c50ebf092eb4", + "modelSet": "suite", + "ruleGroup": "coordinate", + "phases": ["P4.2", "P4.4"], + "norm": {"sections": ["2.8.8", "3.3.11.11"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CoordinateAttributeTest.java", "method": "RCO_T03b", "line": 127}, + "documentation": {"path": "doc/attributes.md", "line": 181, "expectedAcceptance": false} + }, + { + "id": "REB.T01a", + "xtf": "data/REB.T01a.xtf", + "sha256": "fd753e4007478ffa499cf1fc60726afb3145a7f61ecf3ab6497a2bd08e80efec", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "REB_T01a", "line": 128}, + "documentation": {"path": "doc/associations.md", "line": 35, "expectedAcceptance": true} + }, + { + "id": "REB.T01b", + "xtf": "data/REB.T01b.xtf", + "sha256": "90c133caf83b356448675cf5c4f0d582733829d1797ba92813fb6c13ecf1f5fc", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "REB_T01b", "line": 149}, + "documentation": {"path": "doc/associations.md", "line": 35, "expectedAcceptance": false} + }, + { + "id": "REB.T01c", + "xtf": "data/REB.T01c.xtf", + "sha256": "850192adc6e042a800cf5fa87b1f0f1fc1132f6ca1b5b26bdaed4058e6738612", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "REB_T01c", "line": 170}, + "documentation": {"path": "doc/associations.md", "line": 35, "expectedAcceptance": true} + }, + { + "id": "REB.T02a", + "xtf": "data/REB.T02a.xtf", + "sha256": "393cd7df72796807d3a7b711f387720e6a19db1b7cd76e871eabb2afc8daf08f", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "REB_T02a", "line": 191}, + "documentation": {"path": "doc/associations.md", "line": 44, "expectedAcceptance": true} + }, + { + "id": "REB.T02b", + "xtf": "data/REB.T02b.xtf", + "sha256": "605e9f8093b511e126f611b64d049e72b930034fd91c4af5e19115ac40886cda", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "REB_T02b", "line": 212}, + "documentation": {"path": "doc/associations.md", "line": 44, "expectedAcceptance": false} + }, + { + "id": "REB.T02c", + "xtf": "data/REB.T02c.xtf", + "sha256": "fea206a2bb010cf9c81a0567cc4afadb43f5bcb9b5e78392b0f4227ecbc0c374", + "modelSet": "suite", + "ruleGroup": "attribute-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "REB_T02c", "line": 233}, + "documentation": {"path": "doc/associations.md", "line": 44, "expectedAcceptance": false} + }, + { + "id": "REB.T02d", + "xtf": "data/REB.T02d.xtf", + "sha256": "d820342f4683d825c468dcf8644fd0facee1107c729b973fb32847fb58d57cc9", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.9"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AssociationTest.java", "method": "REB_T02d", "line": 254}, + "documentation": {"path": "doc/associations.md", "line": 44, "expectedAcceptance": true}, + "notes": ["XTF comment names REB.T02c. The stable ID comes from the Java test."] + }, + { + "id": "RHE.T01a", + "xtf": "data/RHE.T01a.xtf", + "sha256": "2be065a219cd8922ea62504d6e88a0b1aef254581e45d569667e65c3faa3ba67", + "modelSet": "suite", + "ruleGroup": "header", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/HeaderSectionTest.java", "method": "RHE_T01a", "line": 43}, + "documentation": {"path": "doc/headerSection.md", "line": 18, "expectedAcceptance": false} + }, + { + "id": "RHE.T01b", + "xtf": "data/RHE.T01b.xtf", + "sha256": "6b94dd193863f858d9f5902a27bd821c2c09b12cb1b4ef8c1c75c1b35fb9df9f", + "modelSet": "suite", + "ruleGroup": "header", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/HeaderSectionTest.java", "method": "RHE_T01b", "line": 63}, + "documentation": {"path": "doc/headerSection.md", "line": 18, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ilivalidator", "reason": "Missing SENDER raises IllegalArgumentException in the historical API.", "active": true}] + }, + { + "id": "RHE.T01c", + "xtf": "data/RHE.T01c.xtf", + "sha256": "f1d1ba8f07f1b9e7a7d27869d34111a90193d787bcd43fc1c96e208f792fa8f1", + "modelSet": "suite", + "ruleGroup": "header", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/HeaderSectionTest.java", "method": "RHE_T01c", "line": 85}, + "documentation": {"path": "doc/headerSection.md", "line": 18, "expectedAcceptance": false} + }, + { + "id": "RHE.T02a", + "xtf": "data/RHE.T02a.xtf", + "sha256": "f981f6700037be5a606131ae1bee2c53db175de5119fb9c1976d44ec41e506d1", + "modelSet": "suite", + "ruleGroup": "header", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/HeaderSectionTest.java", "method": "RHE_T02a", "line": 105}, + "documentation": {"path": "doc/headerSection.md", "line": 27, "expectedAcceptance": false}, + "notes": ["The omitted MODELS section is the defect. Basket tags identify the local TestSuite model."] + }, + { + "id": "RHE.T03a", + "xtf": "data/RHE.T03a.xtf", + "sha256": "3b8c0a7fa0bb51be3b6a2f521b4be8ed5cbeb3d5f2ac227d171da0f24f65b0e1", + "modelSet": "suite", + "ruleGroup": "header", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/HeaderSectionTest.java", "method": "RHE_T03a", "line": 125}, + "documentation": {"path": "doc/headerSection.md", "line": 36, "expectedAcceptance": false}, + "notes": ["The empty MODELS section is the defect. Basket tags identify the local TestSuite model."] + }, + { + "id": "RHE.T04a", + "xtf": "data/RHE.T04a.xtf", + "sha256": "11246e2efc682bec09cde6aa1b7fa715e931a402827ef5610c5a5989c65e0418", + "modelSet": "suite", + "ruleGroup": "header", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/HeaderSectionTest.java", "method": "RHE_T04a", "line": 145}, + "documentation": {"path": "doc/headerSection.md", "line": 45, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ilivalidator", "reason": "Missing MODEL NAME raises IllegalArgumentException in the historical API.", "active": true}], + "notes": ["A MODEL element lacks NAME. Basket tags identify the local TestSuite model."] + }, + { + "id": "RHE.T04b", + "xtf": "data/RHE.T04b.xtf", + "sha256": "8ab5d9bc26618db951900432ec2dda6d3dc453f1910a9fbec980110f0f868598", + "modelSet": "suite", + "ruleGroup": "header", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/HeaderSectionTest.java", "method": "RHE_T04b", "line": 167}, + "documentation": {"path": "doc/headerSection.md", "line": 45, "expectedAcceptance": false} + }, + { + "id": "RHE.T04c", + "xtf": "data/RHE.T04c.xtf", + "sha256": "91f8eabda98ee5e24277085480ad22b1d3248c81c76505681246f53c29230269", + "modelSet": "suite", + "ruleGroup": "header", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/HeaderSectionTest.java", "method": "RHE_T04c", "line": 187}, + "documentation": {"path": "doc/headerSection.md", "line": 45, "expectedAcceptance": false} + }, + { + "id": "RHE.T05a", + "xtf": "data/RHE.T05a.xtf", + "sha256": "3d648bfb3970213b59a00f0ddf1938fb25725dd980210a96081e99aeea078e50", + "modelSet": "suite", + "ruleGroup": "header", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/HeaderSectionTest.java", "method": "RHE_T05a", "line": 207}, + "documentation": {"path": "doc/headerSection.md", "line": 54, "expectedAcceptance": false}, + "notes": ["The header deliberately declares unknown AModel in place of TestSuite. The local payload model remains TestSuite."] + }, + { + "id": "RHE.T05b", + "xtf": "data/RHE.T05b.xtf", + "sha256": "e989fbbb7ae625e45cab50708d113549fae797a62f1b01c149abacfead9e6d91", + "modelSet": "suite", + "ruleGroup": "header", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.4"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/HeaderSectionTest.java", "method": "RHE_T05b", "line": 227}, + "documentation": {"path": "doc/headerSection.md", "line": 54, "expectedAcceptance": false}, + "notes": ["The fixture advertises a wrong model version. The local model bytes are retained as pinned."] + }, + { + "id": "RKA.T01a", + "xtf": "data/RKA.T01a.xtf", + "sha256": "3e86d01d2842dce2ba4743a2d8d5394a1f50f64594dee6fea695a0ec86597bcc", + "modelSet": "suite2", + "ruleGroup": "attribute-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.6.1", "2.7.3"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAttributeTest.java", "method": "RKA_T01a", "line": 42}, + "documentation": {"path": "doc/attributes.md", "line": 437, "expectedAcceptance": true} + }, + { + "id": "RKA.T01b", + "xtf": "data/RKA.T01b.xtf", + "sha256": "f7a98aa4035cd6afba70cf960e20eb8114ed287a9ce5289519c7ec848352b018", + "modelSet": "suite2", + "ruleGroup": "attribute-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.6.1", "2.7.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAttributeTest.java", "method": "RKA_T01b", "line": 62}, + "documentation": {"path": "doc/attributes.md", "line": 437, "expectedAcceptance": false} + }, + { + "id": "RKA.T02a", + "xtf": "data/RKA.T02a.xtf", + "sha256": "45187d74ea3388bcf4a98453306d95a8a2670b25e4826b8532e902950353e8d4", + "modelSet": "suite", + "ruleGroup": "attribute-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.6.1", "2.7.3"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAttributeTest.java", "method": "RKA_T02a", "line": 82}, + "documentation": {"path": "doc/attributes.md", "line": 446, "expectedAcceptance": true} + }, + { + "id": "RKA.T02b", + "xtf": "data/RKA.T02b.xtf", + "sha256": "93d913c763373c65c95b8d7c0fb7bcdbb3ac80471fe0725ad51342bc5978563a", + "modelSet": "suite", + "ruleGroup": "attribute-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.6.1", "2.7.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAttributeTest.java", "method": "RKA_T02b", "line": 102}, + "documentation": {"path": "doc/attributes.md", "line": 446, "expectedAcceptance": false} + }, + { + "id": "RKA.T02c", + "xtf": "data/RKA.T02c.xtf", + "sha256": "f7464af22d2ae4a5431d66c7dcf1fbc73b27a2ce6d19f615015d0537599a46cd", + "modelSet": "suite", + "ruleGroup": "attribute-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.6.1", "2.7.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAttributeTest.java", "method": "RKA_T02c", "line": 122}, + "documentation": {"path": "doc/attributes.md", "line": 446, "expectedAcceptance": false} + }, + { + "id": "RKA.T02d", + "xtf": "data/RKA.T02d.xtf", + "sha256": "b42093d42aaade59a2df27cd78fa236826bed762c6344e47ba22981ca14fee73", + "modelSet": "suite", + "ruleGroup": "attribute-cardinality", + "phases": ["P4.2"], + "norm": {"sections": ["2.6.4", "3.3.11.10"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAttributeTest.java", "method": "RKA_T02d", "line": 142}, + "documentation": {"path": "doc/attributes.md", "line": 446, "expectedAcceptance": false} + }, + { + "id": "RKB.T01a", + "xtf": "data/RKB.T01a.xtf", + "sha256": "fa7fe2fc2096ea0184cf6b8ae5ec8c078a9ea40477a34d3673bcd894eaa03a91", + "modelSet": "suite", + "ruleGroup": "association-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.7.1", "2.7.3"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAssociationTest.java", "method": "RKB_T01a", "line": 43}, + "documentation": {"path": "doc/associations.md", "line": 97, "expectedAcceptance": true} + }, + { + "id": "RKB.T01b", + "xtf": "data/RKB.T01b.xtf", + "sha256": "caf6216d83013fd759f2ba168219be11ebeb6b66569bf9ca5f0e9911c8702650", + "modelSet": "suite", + "ruleGroup": "association-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.7.1", "2.7.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAssociationTest.java", "method": "RKB_T01b", "line": 63}, + "documentation": {"path": "doc/associations.md", "line": 97, "expectedAcceptance": false} + }, + { + "id": "RKB.T01c", + "xtf": "data/RKB.T01c.xtf", + "sha256": "8ec788dda67a455ec327f40b066b1ae59b0a4ac4a96d879f40e960b733548f00", + "modelSet": "suite", + "ruleGroup": "association-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.7.1", "2.7.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAssociationTest.java", "method": "RKB_T01c", "line": 83}, + "documentation": {"path": "doc/associations.md", "line": 97, "expectedAcceptance": false} + }, + { + "id": "RKB.T01d", + "xtf": "data/RKB.T01d.xtf", + "sha256": "c497ef48ce5951bac69ef1ca2cca65aba00a5c2e175b303d4bf8de62ad7ed9e8", + "modelSet": "suite", + "ruleGroup": "association-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.7.1", "2.7.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAssociationTest.java", "method": "RKB_T01d", "line": 103}, + "documentation": {"path": "doc/associations.md", "line": 97, "expectedAcceptance": false} + }, + { + "id": "RKB.T02a", + "xtf": "data/RKB.T02a.xtf", + "sha256": "e2d147ed5c2a5e34d512f7f49f756af74bd7d08c58d75395df3de0af4ab7e94c", + "modelSet": "suite", + "ruleGroup": "association-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.7.1", "2.7.3"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAssociationTest.java", "method": "RKB_T02a", "line": 123}, + "documentation": {"path": "doc/associations.md", "line": 106, "expectedAcceptance": true} + }, + { + "id": "RKB.T03a", + "xtf": "data/RKB.T03a.xtf", + "sha256": "c40be2ede3d5a581e42d5924bb9ef31dbaf3856fda4a8e741c285d3adda32e45", + "modelSet": "suite", + "ruleGroup": "association-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.7.1", "2.7.3"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAssociationTest.java", "method": "RKB_T03a", "line": 143}, + "documentation": {"path": "doc/associations.md", "line": 115, "expectedAcceptance": true} + }, + { + "id": "RKB.T04a", + "xtf": "data/RKB.T04a.xtf", + "sha256": "9b929fcc396289d739a6bdc3a2749133fbf4edef99200b9a4647002dacc81a3b", + "modelSet": "suite", + "ruleGroup": "association-cardinality", + "phases": ["P4.4"], + "norm": {"sections": ["2.7.1", "2.7.3"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAssociationTest.java", "method": "RKB_T04a", "line": 163}, + "documentation": {"path": "doc/associations.md", "line": 124, "expectedAcceptance": true} + }, + { + "id": "RKB.T05a", + "xtf": "data/RKB.T05a.xtf", + "sha256": "660c76e4ffd23245632253c2c8de3d9c1d1982c6c34204a76dbd28568390a362", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["2.7.1", "2.7.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAssociationTest.java", "method": "RKB_T05a", "line": 183}, + "documentation": {"path": "doc/associations.md", "line": 133, "expectedAcceptance": false}, + "notes": ["JavaDoc Test-requirement names RKB.T5a.xtf. The executable runJob argument identifies the catalog file."] + }, + { + "id": "RKB.T05b", + "xtf": "data/RKB.T05b.xtf", + "sha256": "b8e5c359676444616c98d3df9a8575814ce8ebe10aee3717faa62d8ff8ea34f9", + "modelSet": "suite", + "ruleGroup": "association-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["2.7.1", "2.7.3"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CardinalityAssociationTest.java", "method": "RKB_T05b", "line": 203}, + "documentation": {"path": "doc/associations.md", "line": 133, "expectedAcceptance": true}, + "notes": ["JavaDoc Test-requirement names RKB.T5b.xtf. The executable runJob argument identifies the catalog file."] + }, + { + "id": "RKl.T01a", + "xtf": "data/RKl.T01a.xtf", + "sha256": "aa4d03b7bd58f86295c991582221a9b922974bc10df7705fb9a7894812a10731", + "modelSet": "suite", + "ruleGroup": "object-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ClassTest.java", "method": "RKl_T01a", "line": 42}, + "documentation": {"path": "doc/classes.md", "line": 18, "expectedAcceptance": false} + }, + { + "id": "RKl.T02a", + "xtf": "data/RKl.T02a.xtf", + "sha256": "f0e2adcd5cd8b6fef98942c26de16496d31e969eb6671ef1a6cc11d576dfcc90", + "modelSet": "suite", + "ruleGroup": "object-identity", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.9", "3.3.1", "3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ClassTest.java", "method": "RKl_T02a", "line": 62}, + "documentation": {"path": "doc/classes.md", "line": 27, "expectedAcceptance": false} + }, + { + "id": "RKl.T02b", + "xtf": "data/RKl.T02b.xtf", + "sha256": "2fb589d26111840c26e8c34e9540dd185e5c97110a7e5f7712c1f010243a2cf8", + "modelSet": "suite", + "ruleGroup": "object-identity", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.9", "3.3.1", "3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ClassTest.java", "method": "RKl_T02b", "line": 82}, + "documentation": {"path": "doc/classes.md", "line": 27, "expectedAcceptance": false} + }, + { + "id": "RKl.T02c", + "xtf": "data/RKl.T02c.xtf", + "sha256": "762856ed80eee063cdf7705ae5f1c9aee86979bc623c08a37e43df0417de859c", + "modelSet": "suite", + "ruleGroup": "object-identity", + "phases": ["P4.4"], + "norm": {"sections": ["3.2.6", "3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ClassTest.java", "method": "RKl_T02c", "line": 102}, + "documentation": {"path": "doc/classes.md", "line": 27, "expectedAcceptance": false} + }, + { + "id": "RKl.T02d", + "xtf": "data/RKl.T02d.xtf", + "sha256": "5ac3d88e39ede4752752b8dbe5f0a3fd0f36a17995ae0c83bf3725a948946dd0", + "modelSet": "suite", + "ruleGroup": "object-identity", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.9", "3.3.1", "3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ClassTest.java", "method": "RKl_T02d", "line": 122}, + "documentation": {"path": "doc/classes.md", "line": 27, "expectedAcceptance": false} + }, + { + "id": "RKl.T02e", + "xtf": "data/RKl.T02e.xtf", + "sha256": "30560954ee59ebf4ee34bb78851d140d231323c0e74ef1a8f6eec38fd4a4f4e8", + "modelSet": "suite", + "ruleGroup": "object-identity", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.9", "3.3.1", "3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ClassTest.java", "method": "RKl_T02e", "line": 142}, + "documentation": {"path": "doc/classes.md", "line": 27, "expectedAcceptance": false} + }, + { + "id": "RKo.T01a", + "xtf": "data/RKo.T01a.xtf", + "sha256": "cc97a5b1d3381d09ad95aa2c296898c7526f8c8c8e6ad0404c3c27b4e5e3d61b", + "modelSet": "suite", + "ruleGroup": "global-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T01a", "line": 42}, + "documentation": {"path": "doc/constraints.md", "line": 18, "expectedAcceptance": true} + }, + { + "id": "RKo.T01b", + "xtf": "data/RKo.T01b.xtf", + "sha256": "8df55f98d5145cf2e7f358d1370c7bf568b35da05f6851e0c34390dec1e1950e", + "modelSet": "suite", + "ruleGroup": "global-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T01b", "line": 62}, + "documentation": {"path": "doc/constraints.md", "line": 18, "expectedAcceptance": false}, + "notes": ["JavaDoc Test-requirement names RKo.T01a.xtf. The executable runJob argument identifies the catalog file."] + }, + { + "id": "RKo.T02a", + "xtf": "data/RKo.T02a.xtf", + "sha256": "7aace752c8b6b435b3fed03615f8a0bb0e15225b32da6e40f4ad8fcd17c15fcd", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T02a", "line": 82}, + "documentation": {"path": "doc/constraints.md", "line": 27, "expectedAcceptance": false} + }, + { + "id": "RKo.T02b", + "xtf": "data/RKo.T02b.xtf", + "sha256": "67f1a54c13ddcef7fcaba6e7f47a5d1d66bee0b2d7ba78884e86ecec5a6f38f2", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T02b", "line": 102}, + "documentation": {"path": "doc/constraints.md", "line": 27, "expectedAcceptance": true} + }, + { + "id": "RKo.T03a", + "xtf": "data/RKo.T03a.xtf", + "sha256": "63914f8daea7ae22c0ca1a9ef6440021907150f420cbebe9235c255a17dda3b4", + "modelSet": "suite", + "ruleGroup": "global-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T03a", "line": 122}, + "documentation": {"path": "doc/constraints.md", "line": 36, "expectedAcceptance": true}, + "vendorSkips": [{"profile": "ig/check", "reason": "Java comment reports PSTACK output. The routine README reports a wrong diagnostic.", "active": true}] + }, + { + "id": "RKo.T03b", + "xtf": "data/RKo.T03b.xtf", + "sha256": "d8fc76d9618d73f9c9abb325280d43f1c920761f5fb155793d91352de39a40c2", + "modelSet": "suite", + "ruleGroup": "global-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T03b", "line": 144}, + "documentation": {"path": "doc/constraints.md", "line": 36, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ig/check", "reason": "Java comment reports PSTACK output. The routine README reports a wrong diagnostic.", "active": true}] + }, + { + "id": "RKo.T04a", + "xtf": "data/RKo.T04a.xtf", + "sha256": "5cc580d1f8f1f65f6a7198f4b166eb4c6949f62d07fcc4237ee34dda7443417c", + "modelSet": "suite", + "ruleGroup": "global-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T04a", "line": 166}, + "documentation": {"path": "doc/constraints.md", "line": 45, "expectedAcceptance": true} + }, + { + "id": "RKo.T04b", + "xtf": "data/RKo.T04b.xtf", + "sha256": "6e3a01d06bb1e23886e4805c199bb494dab966d453b610f47b7f99a47c8b9e85", + "modelSet": "suite", + "ruleGroup": "global-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T04b", "line": 186}, + "documentation": {"path": "doc/constraints.md", "line": 45, "expectedAcceptance": false} + }, + { + "id": "RKo.T04c", + "xtf": "data/RKo.T04c.xtf", + "sha256": "5d1d7246008c7594a215713b2a25b86cab1d6b7e7453c2529231deacc52a1da0", + "modelSet": "suite", + "ruleGroup": "global-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T04c", "line": 206}, + "documentation": {"path": "doc/constraints.md", "line": 45, "expectedAcceptance": true} + }, + { + "id": "RKo.T05a", + "xtf": "data/RKo.T05a.xtf", + "sha256": "7df71ff391c623531ea0337fa2384e31d820dd4edd3ef27bb1460875d141d152", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T05a", "line": 226}, + "documentation": {"path": "doc/constraints.md", "line": 54, "expectedAcceptance": true} + }, + { + "id": "RKo.T05b", + "xtf": "data/RKo.T05b.xtf", + "sha256": "0f79ea12e7b85cb0df696eb53bb5a9287b6d01ea81bf579821d3f25a2fde0338", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T05b", "line": 246}, + "documentation": {"path": "doc/constraints.md", "line": 54, "expectedAcceptance": false} + }, + { + "id": "RKo.T06a", + "xtf": "data/RKo.T06a.xtf", + "sha256": "522a8df14ce851c6400926ef6454a6c9421db047831fae8f3ba178ad38334221", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T06a", "line": 266}, + "documentation": {"path": "doc/constraints.md", "line": 63, "expectedAcceptance": true} + }, + { + "id": "RKo.T06b", + "xtf": "data/RKo.T06b.xtf", + "sha256": "c9ad469255886af81d6492b7d6999648b1187978c02a034e34cedd36cbacf918", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T06b", "line": 286}, + "documentation": {"path": "doc/constraints.md", "line": 63, "expectedAcceptance": true} + }, + { + "id": "RKo.T06c", + "xtf": "data/RKo.T06c.xtf", + "sha256": "d88b0d1958ce2f249e0aa17782420d139eb4263fbf4c09a13888e67096542e09", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T06c", "line": 306}, + "documentation": {"path": "doc/constraints.md", "line": 63, "expectedAcceptance": false} + }, + { + "id": "RKo.T06d", + "xtf": "data/RKo.T06d.xtf", + "sha256": "70c91d52de1ac6f3164c6fa6e1fc8f3d0f8480c8c87f9b6b23f6b2383dc5882b", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T06d", "line": 326}, + "documentation": {"path": "doc/constraints.md", "line": 63, "expectedAcceptance": true} + }, + { + "id": "RKo.T06e", + "xtf": "data/RKo.T06e.xtf", + "sha256": "0ec42aafd34d1fd06d09062b25c80ef64bee26eafa916b367fb2d7e85c9a07b5", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T06e", "line": 346}, + "documentation": {"path": "doc/constraints.md", "line": 63, "expectedAcceptance": true} + }, + { + "id": "RKo.T06f", + "xtf": "data/RKo.T06f.xtf", + "sha256": "3b7d0bebc250a66cd952c6c245f359cdd2781c8f659137f319d65dd177b420d2", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T06f", "line": 366}, + "documentation": {"path": "doc/constraints.md", "line": 63, "expectedAcceptance": false} + }, + { + "id": "RKo.T06g", + "xtf": "data/RKo.T06g.xtf", + "sha256": "c438b2021f8e386c2d764c8163d04502f48b83cfcd08a17378743255172c6297", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T06g", "line": 386}, + "documentation": {"path": "doc/constraints.md", "line": 63, "expectedAcceptance": false} + }, + { + "id": "RKo.T07a", + "xtf": "data/RKo.T07a.xtf", + "sha256": "127a50578d38bcfc36a8069fd6baf6294c6542fd3efe7cdd10014742643fa583", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T07a", "line": 406}, + "documentation": {"path": "doc/constraints.md", "line": 72, "expectedAcceptance": true} + }, + { + "id": "RKo.T07b", + "xtf": "data/RKo.T07b.xtf", + "sha256": "be3293293b76b6a6a3961aa4ceaba28257ff0bb7720a354fe0b13b27d68fc56d", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T07b", "line": 426}, + "documentation": {"path": "doc/constraints.md", "line": 72, "expectedAcceptance": false} + }, + { + "id": "RKo.T09a", + "xtf": "data/RKo.T09a.xtf", + "sha256": "7c2e2c738e50d3539ba36e5c4ec5342632122f77469f2d647e47b63ae49b3eee", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T09a", "line": 446}, + "documentation": {"path": "doc/constraints.md", "line": 90, "expectedAcceptance": false} + }, + { + "id": "RKo.T10a", + "xtf": "data/RKo.T10a.xtf", + "sha256": "12a053cd187a0d4b085970ad9dbc128e19842d53e9600ab522dc89c5476b596c", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T10a", "line": 466}, + "documentation": {"path": "doc/constraints.md", "line": 99, "expectedAcceptance": false} + }, + { + "id": "RKo.T11a", + "xtf": "data/RKo.T11a.xtf", + "sha256": "5ba7a252420377e45ec42ea8d2b1d480aa047037d5bb6a14c710ddd8f291a122", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T11a", "line": 486}, + "documentation": {"path": "doc/constraints.md", "line": 108, "expectedAcceptance": true}, + "notes": ["XTF comment names RBk.T03a. The stable ID comes from the Java test."] + }, + { + "id": "RKo.T11b", + "xtf": "data/RKo.T11b.xtf", + "sha256": "abedb2f74f167d8c50e84d255cbd389aee556cedc8be7511762e0d3ae2311e26", + "modelSet": "suite", + "ruleGroup": "local-constraint", + "phases": ["P4.4"], + "norm": {"sections": ["2.12", "2.13", "2.14"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/ConstraintTest.java", "method": "RKo_T11b", "line": 506}, + "documentation": {"path": "doc/constraints.md", "line": 108, "expectedAcceptance": false}, + "notes": ["XTF comment names RBk.T03a. The stable ID comes from the Java test."] + }, + { + "id": "RPO.T01a", + "xtf": "data/RPO.T01a.xtf", + "sha256": "a5d2a5853ebc4003872ac7dbeeb024252e339f039a99d8e8db2c6ed53f363a41", + "modelSet": "suite", + "ruleGroup": "polyline", + "phases": ["G1"], + "norm": {"sections": ["2.8.12", "3.3.11.12"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/PolylineAttributeTest.java", "method": "RPO_T01a", "line": 48}, + "documentation": {"path": "doc/attributes.md", "line": 200, "expectedAcceptance": true} + }, + { + "id": "RPO.T02a", + "xtf": "data/RPO.T02a.xtf", + "sha256": "c27e195132adf3f46a851101c220269bf6b2ba2649adbdc054678458f581cf35", + "modelSet": "suite", + "ruleGroup": "polyline", + "phases": ["G1"], + "norm": {"sections": ["2.8.12.2", "3.3.11.12"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/PolylineAttributeTest.java", "method": "RPO_T02a", "line": 74}, + "documentation": {"path": "doc/attributes.md", "line": 210, "expectedAcceptance": false}, + "notes": ["The pinned BoLinien model declares an overlap tolerance of 0.10. The English description mentions 1."] + }, + { + "id": "RPO.T02b", + "xtf": "data/RPO.T02b.xtf", + "sha256": "046825a5f4ada6df7966771f70ba5c30f9fd9f571fc0ac338118abeb0f001a67", + "modelSet": "suite", + "ruleGroup": "polyline", + "phases": ["G1"], + "norm": {"sections": ["2.8.12.2", "3.3.11.12"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/PolylineAttributeTest.java", "method": "RPO_T02b", "line": 100}, + "documentation": {"path": "doc/attributes.md", "line": 210, "expectedAcceptance": false}, + "notes": ["The pinned BoLinien model declares an overlap tolerance of 0.10. The English description mentions 1."] + }, + { + "id": "RPO.T02c", + "xtf": "data/RPO.T02c.xtf", + "sha256": "88b2102fea1862924ac5ef87eecdea359433de552391836153906fa916a162b2", + "modelSet": "suite", + "ruleGroup": "polyline", + "phases": ["G1"], + "norm": {"sections": ["2.8.12.2", "3.3.11.12"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/PolylineAttributeTest.java", "method": "RPO_T02c", "line": 126}, + "documentation": {"path": "doc/attributes.md", "line": 210, "expectedAcceptance": true}, + "notes": ["The pinned BoLinien model declares an overlap tolerance of 0.10. The English description mentions 1."] + }, + { + "id": "RPO.T03a", + "xtf": "data/RPO.T03a.xtf", + "sha256": "03719bf6862580521ba0bc6f545755a334fe5a133f0a92f49e527ff8c11cb709", + "modelSet": "suite", + "ruleGroup": "polyline", + "phases": ["G1"], + "norm": {"sections": ["2.8.12.2", "3.3.11.12"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/PolylineAttributeTest.java", "method": "RPO_T03a", "line": 152}, + "documentation": {"path": "doc/attributes.md", "line": 220, "expectedAcceptance": true}, + "notes": ["The pinned BoLinien model declares an overlap tolerance of 0.10. The English description mentions 1."] + }, + { + "id": "RPO.T03b", + "xtf": "data/RPO.T03b.xtf", + "sha256": "4d6947900918eec80e6e96538d79c5b84aa1f8b16c823051563fa4ac841fba4a", + "modelSet": "suite", + "ruleGroup": "polyline", + "phases": ["G1"], + "norm": {"sections": ["2.8.12.2", "3.3.11.12"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/PolylineAttributeTest.java", "method": "RPO_T03b", "line": 178}, + "documentation": {"path": "doc/attributes.md", "line": 220, "expectedAcceptance": false}, + "notes": ["The pinned BoLinien model declares an overlap tolerance of 0.10. The English description mentions 1."] + }, + { + "id": "RRO.T01a", + "xtf": "data/RRO.T01a.xtf", + "sha256": "235a5a99cbbb6c921be1bfa6ec086a53f56e18e16ff1cdcdd27e94ee30ed78d4", + "modelSet": "suite", + "ruleGroup": "object-order", + "phases": ["P4.2"], + "norm": {"sections": ["3.2.5"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/OrderObjectTest.java", "method": "RRO_T01a", "line": 41}, + "documentation": {"path": "doc/order.md", "line": 18, "expectedAcceptance": true} + }, + { + "id": "RRO.T01b", + "xtf": "data/RRO.T01b.xtf", + "sha256": "972d1f28115a2ec3bdc4864382438bbffb5a35838bdd9771e29da26cc3bafa9b", + "modelSet": "suite", + "ruleGroup": "object-order", + "phases": ["P4.2"], + "norm": {"sections": ["3.2.5"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/OrderObjectTest.java", "method": "RRO_T01b", "line": 61}, + "documentation": {"path": "doc/order.md", "line": 18, "expectedAcceptance": true} + }, + { + "id": "RRiO.T01a", + "xtf": "data/RRiO.T01a.xtf", + "sha256": "25c30e3d3fac405068ad6676a56fcdf8e6affe2fa83c8c5cbb6963eb81ffdbfd", + "modelSet": "suite", + "ruleGroup": "attribute-order", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.7"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/OrderAttributeTest.java", "method": "RRiO_T01a", "line": 42}, + "documentation": {"path": "doc/order.md", "line": 35, "expectedAcceptance": true} + }, + { + "id": "RRiO.T01b", + "xtf": "data/RRiO.T01b.xtf", + "sha256": "a7a4df2da81baa56cf02d57cdedb3fd93f5152679cd0199439cb2b76356c7149", + "modelSet": "suite", + "ruleGroup": "attribute-order", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/OrderAttributeTest.java", "method": "RRiO_T01b", "line": 62}, + "documentation": {"path": "doc/order.md", "line": 35, "expectedAcceptance": false} + }, + { + "id": "RRiO.T01c", + "xtf": "data/RRiO.T01c.xtf", + "sha256": "c7c095b82ab67a4dabaa1d07ad6d3532d832b129e31de96460f3d32724f313ed", + "modelSet": "suite", + "ruleGroup": "attribute-order", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/OrderAttributeTest.java", "method": "RRiO_T01c", "line": 82}, + "documentation": {"path": "doc/order.md", "line": 35, "expectedAcceptance": false} + }, + { + "id": "RRiO.T02a", + "xtf": "data/RRiO.T02a.xtf", + "sha256": "f371429767869f56c656c238705fcb4d7f120806f52825cec0e77169a8955e39", + "modelSet": "suite", + "ruleGroup": "attribute-order", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.7"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/OrderAttributeTest.java", "method": "RRiO_T02a", "line": 102}, + "documentation": {"path": "doc/order.md", "line": 44, "expectedAcceptance": true} + }, + { + "id": "RRiO.T02b", + "xtf": "data/RRiO.T02b.xtf", + "sha256": "34a4014ea37c977c057a76a73ca2eefa1c79dc02a96abade38174785d5c7f4db", + "modelSet": "suite", + "ruleGroup": "attribute-order", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/OrderAttributeTest.java", "method": "RRiO_T02b", "line": 122}, + "documentation": {"path": "doc/order.md", "line": 44, "expectedAcceptance": false} + }, + { + "id": "RRiO.T03a", + "xtf": "data/RRiO.T03a.xtf", + "sha256": "43140d0dff7c397a67091d9468442ec1b5a61b75b4b00810c5ef3046e3665839", + "modelSet": "suite", + "ruleGroup": "attribute-order", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.7"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/OrderAttributeTest.java", "method": "RRiO_T03a", "line": 142}, + "documentation": {"path": "doc/order.md", "line": 53, "expectedAcceptance": true} + }, + { + "id": "RRiO.T03b", + "xtf": "data/RRiO.T03b.xtf", + "sha256": "f89581319a86d56c14e4fd06b311b03108a91953478e36e04db49216f5d29e10", + "modelSet": "suite", + "ruleGroup": "attribute-order", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/OrderAttributeTest.java", "method": "RRiO_T03b", "line": 162}, + "documentation": {"path": "doc/order.md", "line": 53, "expectedAcceptance": false}, + "notes": ["The documentation links to absent RRiO.T023.xtf. The Java invocation and expected-result row identify RRiO.T03b.xtf."] + }, + { + "id": "RRiO.T03c", + "xtf": "data/RRiO.T03c.xtf", + "sha256": "e3a9311cbbd870a1e0f10a720e161dd15e833303af931884587aa0fc4c4a6649", + "modelSet": "suite", + "ruleGroup": "attribute-order", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/OrderAttributeTest.java", "method": "RRiO_T03c", "line": 182}, + "documentation": {"path": "doc/order.md", "line": 53, "expectedAcceptance": false} + }, + { + "id": "RRiO.T03d", + "xtf": "data/RRiO.T03d.xtf", + "sha256": "ecdfbaab7d2d39b4988746a552122932894252111b8de8d4e7db6e90794e4baf", + "modelSet": "suite", + "ruleGroup": "attribute-order", + "phases": ["P4.2", "P4.4"], + "norm": {"sections": ["2.7.1", "3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/OrderAttributeTest.java", "method": "RRiO_T03d", "line": 202}, + "documentation": {"path": "doc/order.md", "line": 53, "expectedAcceptance": false} + }, + { + "id": "RSU.T01a", + "xtf": "data/RSU.T01a.xtf", + "sha256": "4c4c2b1b6bea0201af079084b9701367912823149a5ef629532351164df932fa", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T01a", "line": 45}, + "documentation": {"path": "doc/attributes.md", "line": 239, "expectedAcceptance": false} + }, + { + "id": "RSU.T01b", + "xtf": "data/RSU.T01b.xtf", + "sha256": "87e608a468d0f73a71f266c72e57046c57ea77400d98c900b268f6dbde3c1d0b", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T01b", "line": 69}, + "documentation": {"path": "doc/attributes.md", "line": 239, "expectedAcceptance": true}, + "notes": ["XTF comment names RSU.T01a. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T01c", + "xtf": "data/RSU.T01c.xtf", + "sha256": "43b0d5cc98534b410005acdc4545f2d433b01991e3a35fd3c0bb6e086b094846", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T01c", "line": 93}, + "documentation": {"path": "doc/attributes.md", "line": 239, "expectedAcceptance": false}, + "notes": ["XTF comment names RSU.T01a. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T01d", + "xtf": "data/RSU.T01d.xtf", + "sha256": "e87e152b6a9798e28da93bc26e8af5d31b208eb9c5d506e87e97753a837d0eae", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T01d", "line": 117}, + "documentation": {"path": "doc/attributes.md", "line": 239, "expectedAcceptance": true}, + "notes": ["XTF comment names RSU.T01a. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T01e", + "xtf": "data/RSU.T01e.xtf", + "sha256": "214d9cab5199c07291e93d214acbbf191f0c282e6f642616bb0d93a53728e947", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T01e", "line": 141}, + "documentation": {"path": "doc/attributes.md", "line": 239, "expectedAcceptance": true}, + "notes": ["XTF comment names RSU.T01a. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T01f", + "xtf": "data/RSU.T01f.xtf", + "sha256": "a35dc8fb3e5eaae96d91dea32f19bb056df82961d67b7772cd6a668210f8caf7", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T01f", "line": 165}, + "documentation": {"path": "doc/attributes.md", "line": 239, "expectedAcceptance": false}, + "notes": ["XTF comment names RSU.T01a. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T01g", + "xtf": "data/RSU.T01g.xtf", + "sha256": "2f7911b9c7caed981d9f1476f260ca2d6bf1bb85bb13d4f74fcaa756191bdd1f", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T01g", "line": 189}, + "documentation": {"path": "doc/attributes.md", "line": 239, "expectedAcceptance": true}, + "notes": ["XTF comment names RSU.T01a. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T01h", + "xtf": "data/RSU.T01h.xtf", + "sha256": "872da68d9347d6c43700143c44808c8ba5cd770bf2b3a8f90faeb0ebb8e055d7", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T01h", "line": 213}, + "documentation": {"path": "doc/attributes.md", "line": 239, "expectedAcceptance": false}, + "notes": ["XTF comment names RSU.T01a. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T02a", + "xtf": "data/RSU.T02a.xtf", + "sha256": "a43dd53b7a05ad57c2ad8bd34c55f0df7c000eb698668ad33b2b3b138d178719", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T02a", "line": 237}, + "documentation": {"path": "doc/attributes.md", "line": 249, "expectedAcceptance": true} + }, + { + "id": "RSU.T02b", + "xtf": "data/RSU.T02b.xtf", + "sha256": "2d7b9e8e899e617a2304f5f0bfc48cdb1c334bdf19cd4d300293d437f0bac628", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T02b", "line": 261}, + "documentation": {"path": "doc/attributes.md", "line": 249, "expectedAcceptance": true} + }, + { + "id": "RSU.T03a", + "xtf": "data/RSU.T03a.xtf", + "sha256": "35ab65784039a426da8494b31917b8ba385aab02057e9c9488ec1bb2ea57b8e6", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T03a", "line": 285}, + "documentation": {"path": "doc/attributes.md", "line": 259, "expectedAcceptance": false} + }, + { + "id": "RSU.T03b", + "xtf": "data/RSU.T03b.xtf", + "sha256": "23129925fcfd614a1a32a3c183604c17e2abda4d8af07ae32c29d71fa139df17", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T03b", "line": 309}, + "documentation": {"path": "doc/attributes.md", "line": 259, "expectedAcceptance": false} + }, + { + "id": "RSU.T04a", + "xtf": "data/RSU.T04a.xtf", + "sha256": "844826c5ae05586ddf8aaa2ecb2dfe99686d0681c7df689475ef357086b29e5a", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T04a", "line": 333}, + "documentation": {"path": "doc/attributes.md", "line": 269, "expectedAcceptance": true} + }, + { + "id": "RSU.T04b", + "xtf": "data/RSU.T04b.xtf", + "sha256": "6bbb5a82a39c1dc45f099e46be6d99a940fce265ade4fde4315d7fcabf4e7335", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T04b", "line": 357}, + "documentation": {"path": "doc/attributes.md", "line": 269, "expectedAcceptance": true} + }, + { + "id": "RSU.T05a", + "xtf": "data/RSU.T05a.xtf", + "sha256": "3f194967cd901748228931605fe0458fb7b122bd7c1ee24119fe6915d5f358db", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T05a", "line": 381}, + "documentation": {"path": "doc/attributes.md", "line": 279, "expectedAcceptance": true} + }, + { + "id": "RSU.T05b", + "xtf": "data/RSU.T05b.xtf", + "sha256": "17c746ef4f6a6438b2ac83b6b0dae58568a3c1f56a86e28b470d43899a73d776", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T05b", "line": 405}, + "documentation": {"path": "doc/attributes.md", "line": 279, "expectedAcceptance": true} + }, + { + "id": "RSU.T06a", + "xtf": "data/RSU.T06a.xtf", + "sha256": "87572d1ce277b43492da27c4164b5179defe3b2c303edd358bc76e7935c6d44e", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T06a", "line": 429}, + "documentation": {"path": "doc/attributes.md", "line": 289, "expectedAcceptance": false} + }, + { + "id": "RSU.T06b", + "xtf": "data/RSU.T06b.xtf", + "sha256": "768d9f787f3f0f40777f56bf38d302735502ccf945cd6410eb03f07b01127ac3", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T06b", "line": 453}, + "documentation": {"path": "doc/attributes.md", "line": 289, "expectedAcceptance": false} + }, + { + "id": "RSU.T07a", + "xtf": "data/RSU.T07a.xtf", + "sha256": "9efcb3202365cf3682c8fb7d2e1bcf30c0f6da26ca5085b0b5f82c0107726517", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T07a", "line": 477}, + "documentation": {"path": "doc/attributes.md", "line": 299, "expectedAcceptance": false} + }, + { + "id": "RSU.T07b", + "xtf": "data/RSU.T07b.xtf", + "sha256": "4602ab3ca399159c50c2a8f0da4d99745538b6efa683af2ed4c5bc4bd1bcb25c", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T07b", "line": 501}, + "documentation": {"path": "doc/attributes.md", "line": 299, "expectedAcceptance": false} + }, + { + "id": "RSU.T08a", + "xtf": "data/RSU.T08a.xtf", + "sha256": "71730eec9f630274c7cf29e8206687b8fba83d2f6f3f9f051fb57fa138132451", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T08a", "line": 525}, + "documentation": {"path": "doc/attributes.md", "line": 309, "expectedAcceptance": false} + }, + { + "id": "RSU.T08b", + "xtf": "data/RSU.T08b.xtf", + "sha256": "21d26933694f31bd5d8d3ab81c9aa49de5ec62c408ed3a074562a23532f43576", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T08b", "line": 549}, + "documentation": {"path": "doc/attributes.md", "line": 309, "expectedAcceptance": false} + }, + { + "id": "RSU.T09a", + "xtf": "data/RSU.T09a.xtf", + "sha256": "8a699dec72016c987d338a0fcabe15092b431de3dd47d199f202332d59f5951a", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T09a", "line": 573}, + "documentation": {"path": "doc/attributes.md", "line": 319, "expectedAcceptance": false} + }, + { + "id": "RSU.T09b", + "xtf": "data/RSU.T09b.xtf", + "sha256": "fa4b163b60b22c93b012c70f5b8078337543b17d67b651c309a2a94e4de3cd37", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T09b", "line": 597}, + "documentation": {"path": "doc/attributes.md", "line": 319, "expectedAcceptance": false} + }, + { + "id": "RSU.T10a", + "xtf": "data/RSU.T10a.xtf", + "sha256": "b593e15aa4e6422bda08285d386bd056890081f37dd314fbc42947b71437700e", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T10a", "line": 621}, + "documentation": {"path": "doc/attributes.md", "line": 329, "expectedAcceptance": false}, + "notes": ["JavaDoc Test-requirement names RSU.T010a.xtf. The executable runJob argument identifies the catalog file."] + }, + { + "id": "RSU.T10b", + "xtf": "data/RSU.T10b.xtf", + "sha256": "65485c0ed13d08ad24808b0ee70b6fd6aae70d00472b75cd7c3d78169eb788fa", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T10b", "line": 645}, + "documentation": {"path": "doc/attributes.md", "line": 329, "expectedAcceptance": false}, + "notes": ["JavaDoc Test-requirement names RSU.T010b.xtf. The executable runJob argument identifies the catalog file."] + }, + { + "id": "RSU.T11a", + "xtf": "data/RSU.T11a.xtf", + "sha256": "cbf62e4c9a2bac819b3915bf6c045b4dadc109f2b16a9c63f0514027eac3d05c", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T11a", "line": 669}, + "documentation": {"path": "doc/attributes.md", "line": 339, "expectedAcceptance": false}, + "notes": ["The English, German and French documentation link to absent RSU.T011.xtf.", "JavaDoc Test-requirement names RSU.T011a.xtf. The executable runJob argument identifies the catalog file."] + }, + { + "id": "RSU.T11b", + "xtf": "data/RSU.T11b.xtf", + "sha256": "43cb6e9c6739a1f39ed1bf70bca2e4eff861dcf3af26f7e5e078b45fe14032df", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T11b", "line": 693}, + "documentation": {"path": "doc/attributes.md", "line": 339, "expectedAcceptance": false}, + "notes": ["The English, German and French documentation link to absent RSU.T011.xtf.", "JavaDoc Test-requirement names RSU.T011b.xtf. The executable runJob argument identifies the catalog file."] + }, + { + "id": "RSU.T12a", + "xtf": "data/RSU.T12a.xtf", + "sha256": "6663541523684da61d9cb0f0021957b7b13eeeda46c99531e69ecae721423ef1", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T12a", "line": 717}, + "documentation": {"path": "doc/attributes.md", "line": 349, "expectedAcceptance": false}, + "notes": ["JavaDoc Test-requirement names RSU.T012a.xtf. The executable runJob argument identifies the catalog file."] + }, + { + "id": "RSU.T12b", + "xtf": "data/RSU.T12b.xtf", + "sha256": "88a583646a7fd92b86e354bbe0b9ce1a14197811c2b03a86e91bd679a4332c1e", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T12b", "line": 741}, + "documentation": {"path": "doc/attributes.md", "line": 349, "expectedAcceptance": false}, + "notes": ["JavaDoc Test-requirement names RSU.T012b.xtf. The executable runJob argument identifies the catalog file."] + }, + { + "id": "RSU.T13a", + "xtf": "data/RSU.T13a.xtf", + "sha256": "107a9175cfdc6e1e879a96a05dce9fce4e88f1fdd45387549fa587735b08e5d7", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T13a", "line": 765}, + "documentation": {"path": "doc/attributes.md", "line": 359, "expectedAcceptance": false}, + "notes": ["JavaDoc Test-requirement names RSU.T013a.xtf. The executable runJob argument identifies the catalog file."] + }, + { + "id": "RSU.T13b", + "xtf": "data/RSU.T13b.xtf", + "sha256": "f66243d30e0c694bf0dd3bd5700371873f8894ee62fc02d75c6008b88a2a1f17", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T13b", "line": 789}, + "documentation": {"path": "doc/attributes.md", "line": 359, "expectedAcceptance": false}, + "notes": ["JavaDoc Test-requirement names RSU.T013b.xtf. The executable runJob argument identifies the catalog file."] + }, + { + "id": "RSU.T14a", + "xtf": "data/RSU.T14a.xtf", + "sha256": "c99d18b969f1a4040de78c34cbf39803bc5bf19a1e139793e7889b031ccf4cda", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T14a", "line": 813}, + "documentation": {"path": "doc/attributes.md", "line": 369, "expectedAcceptance": true}, + "notes": ["XTF comment names RSU.Txx. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T14b", + "xtf": "data/RSU.T14b.xtf", + "sha256": "a124e7c3a07d54e37f348360bce17a39bf4da806ace77e21b5b1bd06a94f0f25", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T14b", "line": 837}, + "documentation": {"path": "doc/attributes.md", "line": 369, "expectedAcceptance": true}, + "notes": ["The English result row repeats T14b three times. The German and French rows give one acceptance per case.", "XTF comment names RSU.Txx. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T14c", + "xtf": "data/RSU.T14c.xtf", + "sha256": "21d23b4b0ffa1f45bcbf3f4749500311d549aec48aebb6c43c5b9e940fa66ae5", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "DOCUMENTATION_GAP", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T14c", "line": 861}, + "documentation": {"path": "doc/attributes.md", "line": 369, "expectedAcceptance": "unknown"}, + "notes": ["The English result row omits T14c. Acceptance is stated in doc/de/attribute.adoc:645 and doc/fr/attributs.adoc:644.", "XTF comment names RSU.Txx. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T14d", + "xtf": "data/RSU.T14d.xtf", + "sha256": "c6b6d4d12f6fc0a37e7d70b0d2042ea46d00fc7c1e6dffd6d9605c44628b882d", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": true, + "oracleStatus": "DOCUMENTATION_GAP", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T14d", "line": 885}, + "documentation": {"path": "doc/attributes.md", "line": 369, "expectedAcceptance": "unknown"}, + "notes": ["The English result row omits T14d. Acceptance is stated in doc/de/attribute.adoc:646 and doc/fr/attributs.adoc:645.", "XTF comment names RSU.Txx. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T15a", + "xtf": "data/RSU.T15a.xtf", + "sha256": "1a2afd52de73cac4e3de61238e6175a57d8396c62f558a5b5f0e8819912dc7da", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T15a", "line": 909}, + "documentation": {"path": "doc/attributes.md", "line": 379, "expectedAcceptance": false}, + "notes": ["XTF comment names RSU.T03a. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T15b", + "xtf": "data/RSU.T15b.xtf", + "sha256": "ef65a711a24aba3b58015f11f632915c8643c40e473320e040e02edfe1d16e2d", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T15b", "line": 933}, + "documentation": {"path": "doc/attributes.md", "line": 379, "expectedAcceptance": false}, + "notes": ["The German link label names T14b at doc/de/attribute.adoc:658, but its target is T15b.", "XTF comment names RSU.T03b. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T16a", + "xtf": "data/RSU.T16a.xtf", + "sha256": "a925dc42492febdf12fa875742b2698c00e7ee48d487a54cb81d117947ade4d4", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T16a", "line": 957}, + "documentation": {"path": "doc/attributes.md", "line": 389, "expectedAcceptance": false}, + "notes": ["The German link at doc/de/attribute.adoc:673 points to T12a. The Java invocation uses T16a.", "XTF comment names RSU.T03b. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T16b", + "xtf": "data/RSU.T16b.xtf", + "sha256": "e5253a3272fe92b6a9199941c37b3e73459dd83bb5dfbda7a93cab1c39abd3eb", + "modelSet": "suite", + "ruleGroup": "area-surface", + "phases": ["G1"], + "norm": {"sections": ["2.8.13", "3.3.11.13"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T16b", "line": 981}, + "documentation": {"path": "doc/attributes.md", "line": 389, "expectedAcceptance": false}, + "notes": ["The German link at doc/de/attribute.adoc:674 points to T12b. The Java invocation uses T16b.", "XTF comment names RSU.T03b. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T17a", + "xtf": "data/RSU.T17a.xtf", + "sha256": "e32c6b070e46a93b653abe5a4b144fc70b0261f3a2fe2cbd2ad07cf4e96dbe9a", + "modelSet": "suite", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"sections": ["2.12", "2.14", "Appendix A (areAreas)"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T17a", "line": 1005}, + "documentation": {"path": "doc/attributes.md", "line": 399, "expectedAcceptance": false}, + "notes": ["The documentation entry RKo.T08 points to this case group and has no separate fixture.", "XTF comment names RKo.T08a. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T17b", + "xtf": "data/RSU.T17b.xtf", + "sha256": "7fcb83b1fad47580bc0585b31cd0c2d67d4a4eddc282903563d51d3b05ae46d3", + "modelSet": "suite", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"sections": ["2.12", "2.14", "Appendix A (areAreas)"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T17b", "line": 1029}, + "documentation": {"path": "doc/attributes.md", "line": 399, "expectedAcceptance": true}, + "notes": ["The documentation entry RKo.T08 points to this case group and has no separate fixture.", "XTF comment names RKo.T08b. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T17c", + "xtf": "data/RSU.T17c.xtf", + "sha256": "fee2b525b85cb2b27effb95bd28fc06b311e181d4669a5e4f1a3b0cb86a4f9ad", + "modelSet": "suite", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"sections": ["2.12", "2.14", "Appendix A (areAreas)"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T17c", "line": 1053}, + "documentation": {"path": "doc/attributes.md", "line": 399, "expectedAcceptance": true}, + "notes": ["The documentation entry RKo.T08 points to this case group and has no separate fixture.", "XTF comment names RKo.T08c. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T17d", + "xtf": "data/RSU.T17d.xtf", + "sha256": "b219bd4a53a61f608f6d99e49981eaf49d2656818ffce6046ea000c3cf645f98", + "modelSet": "suite", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"sections": ["2.12", "2.14", "Appendix A (areAreas)"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T17d", "line": 1077}, + "documentation": {"path": "doc/attributes.md", "line": 399, "expectedAcceptance": false}, + "notes": ["The documentation entry RKo.T08 points to this case group and has no separate fixture.", "XTF comment names RKo.T08a. The stable ID comes from the Java test."] + }, + { + "id": "RSU.T18a", + "xtf": "data/RSU.T18a.xtf", + "sha256": "b472068b0e26846b88f66a37281acdb50071e2e29fc6dae26ba82aaeb4fbf0ac", + "modelSet": "areaExtensions", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"source": "https://www.interlis.ch/download/interlis2/INTERLIS_ext_e.pdf", "sections": ["areAreas2"], "openDecision": "Define support for this declared INTERLIS 2.3 extension separately from the INTERLIS 2.4 built-ins (norm-decisions.md#decision-11)."}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T18a", "line": 1101}, + "documentation": {"path": "doc/attributes.md", "line": 409, "expectedAcceptance": false} + }, + { + "id": "RSU.T18b", + "xtf": "data/RSU.T18b.xtf", + "sha256": "6094475ab3330088633184371ebb96db5452ece23932c86d2814930a0ba0c12d", + "modelSet": "areaExtensions", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"source": "https://www.interlis.ch/download/interlis2/INTERLIS_ext_e.pdf", "sections": ["areAreas2"], "openDecision": "Define support for this declared INTERLIS 2.3 extension separately from the INTERLIS 2.4 built-ins (norm-decisions.md#decision-11)."}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T18b", "line": 1125}, + "documentation": {"path": "doc/attributes.md", "line": 409, "expectedAcceptance": false} + }, + { + "id": "RSU.T18c", + "xtf": "data/RSU.T18c.xtf", + "sha256": "a4ff65476749d233681e8275682aba8c88f6e08762206954ce93c8609d9a68d5", + "modelSet": "areaExtensions", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"source": "https://www.interlis.ch/download/interlis2/INTERLIS_ext_e.pdf", "sections": ["areAreas2"], "openDecision": "Define support for this declared INTERLIS 2.3 extension separately from the INTERLIS 2.4 built-ins (norm-decisions.md#decision-11)."}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T18c", "line": 1149}, + "documentation": {"path": "doc/attributes.md", "line": 409, "expectedAcceptance": false} + }, + { + "id": "RSU.T18d", + "xtf": "data/RSU.T18d.xtf", + "sha256": "578718158f24c1d3bf83ce98d80977bda5ec28c46040b2fab419870570d93dfe", + "modelSet": "areaExtensions", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"source": "https://www.interlis.ch/download/interlis2/INTERLIS_ext_e.pdf", "sections": ["areAreas2"], "openDecision": "Define support for this declared INTERLIS 2.3 extension separately from the INTERLIS 2.4 built-ins (norm-decisions.md#decision-11)."}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T18d", "line": 1173}, + "documentation": {"path": "doc/attributes.md", "line": 409, "expectedAcceptance": true} + }, + { + "id": "RSU.T18e", + "xtf": "data/RSU.T18e.xtf", + "sha256": "437a3d7b4a9c5413b8b5ed7a0439dd67bc0a9d786e9bc9efeea05eaacb05c614", + "modelSet": "areaExtensions", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"source": "https://www.interlis.ch/download/interlis2/INTERLIS_ext_e.pdf", "sections": ["areAreas2"], "openDecision": "Define support for this declared INTERLIS 2.3 extension separately from the INTERLIS 2.4 built-ins (norm-decisions.md#decision-11)."}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T18e", "line": 1197}, + "documentation": {"path": "doc/attributes.md", "line": 409, "expectedAcceptance": false} + }, + { + "id": "RSU.T19a", + "xtf": "data/RSU.T19a.xtf", + "sha256": "b125724fca68eaff0cccee48cd13d2bd5cf27ecc41bd1892a8beb7f5fd3264de", + "modelSet": "areaExtensions", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"source": "https://www.interlis.ch/download/interlis2/INTERLIS_ext_e.pdf", "sections": ["areAreas3"], "openDecision": "Define support for this declared INTERLIS 2.3 extension separately from the INTERLIS 2.4 built-ins (norm-decisions.md#decision-11)."}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T19a", "line": 1221}, + "documentation": {"path": "doc/attributes.md", "line": 419, "expectedAcceptance": false} + }, + { + "id": "RSU.T19b", + "xtf": "data/RSU.T19b.xtf", + "sha256": "c0c39cd0c9f7858b210b47159bef9c4a442930a7260778c707ee2ab963f759eb", + "modelSet": "areaExtensions", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"source": "https://www.interlis.ch/download/interlis2/INTERLIS_ext_e.pdf", "sections": ["areAreas3"], "openDecision": "Define support for this declared INTERLIS 2.3 extension separately from the INTERLIS 2.4 built-ins (norm-decisions.md#decision-11)."}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T19b", "line": 1245}, + "documentation": {"path": "doc/attributes.md", "line": 419, "expectedAcceptance": false} + }, + { + "id": "RSU.T19c", + "xtf": "data/RSU.T19c.xtf", + "sha256": "db5cbb16d2602424c33bbb6e10dbd822f8f9bf6a019826675ae76016dc7e7556", + "modelSet": "areaExtensions", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"source": "https://www.interlis.ch/download/interlis2/INTERLIS_ext_e.pdf", "sections": ["areAreas3"], "openDecision": "Define support for this declared INTERLIS 2.3 extension separately from the INTERLIS 2.4 built-ins (norm-decisions.md#decision-11)."}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T19c", "line": 1269}, + "documentation": {"path": "doc/attributes.md", "line": 419, "expectedAcceptance": false} + }, + { + "id": "RSU.T19d", + "xtf": "data/RSU.T19d.xtf", + "sha256": "acc43ac7c1a9839c584ea30f965b6d520c81a5db69e4053bdceefe9ebfce5009", + "modelSet": "areaExtensions", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"source": "https://www.interlis.ch/download/interlis2/INTERLIS_ext_e.pdf", "sections": ["areAreas3"], "openDecision": "Define support for this declared INTERLIS 2.3 extension separately from the INTERLIS 2.4 built-ins (norm-decisions.md#decision-11)."}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T19d", "line": 1293}, + "documentation": {"path": "doc/attributes.md", "line": 419, "expectedAcceptance": false} + }, + { + "id": "RSU.T19e", + "xtf": "data/RSU.T19e.xtf", + "sha256": "9aa6485230eb51c37b2e6d86136ddd62b8bd1e0cd714d0534585640740133e48", + "modelSet": "areaExtensions", + "ruleGroup": "area-constraint", + "phases": ["P4.4", "G1"], + "norm": {"source": "https://www.interlis.ch/download/interlis2/INTERLIS_ext_e.pdf", "sections": ["areAreas3"], "openDecision": "Define support for this declared INTERLIS 2.3 extension separately from the INTERLIS 2.4 built-ins (norm-decisions.md#decision-11)."}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/SurfaceAreaAttributeTest.java", "method": "RSU_T19e", "line": 1317}, + "documentation": {"path": "doc/attributes.md", "line": 419, "expectedAcceptance": true} + }, + { + "id": "RStReA.T01a", + "xtf": "data/RStReA.T01a.xtf", + "sha256": "5e207e254e65e1b9a46f70866d9b496309c9720d7ec69738b45ccd5f4a507f90", + "modelSet": "suite2", + "ruleGroup": "structure-attribute", + "phases": ["P4.2"], + "norm": {"sections": ["2.6.4", "3.3.11.9"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/StructureReferenceAttributeTest.java", "method": "RStReA_T01a", "line": 41}, + "documentation": {"path": "doc/attributes.md", "line": 135, "expectedAcceptance": true} + }, + { + "id": "RStReA.T01b", + "xtf": "data/RStReA.T01b.xtf", + "sha256": "e6467e3279a178ab1d5346ac0034769d224a7c59bcb6bf0a986d3b38f5555936", + "modelSet": "suite2", + "ruleGroup": "structure-attribute", + "phases": ["P4.2"], + "norm": {"sections": ["2.6.4", "3.3.11.9"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/StructureReferenceAttributeTest.java", "method": "RStReA_T01b", "line": 61}, + "documentation": {"path": "doc/attributes.md", "line": 135, "expectedAcceptance": false} + }, + { + "id": "RStReA.T01c", + "xtf": "data/RStReA.T01c.xtf", + "sha256": "ee05230c82212781330ea3f17cb983770b6048483aec73bc9d29fd40b29efc86", + "modelSet": "suite2", + "ruleGroup": "structure-attribute", + "phases": ["P4.4"], + "norm": {"sections": ["2.6.4", "3.3.11.9"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/StructureReferenceAttributeTest.java", "method": "RStReA_T01c", "line": 81}, + "documentation": {"path": "doc/attributes.md", "line": 135, "expectedAcceptance": false} + }, + { + "id": "RStReA.T02a", + "xtf": "data/RStReA.T02a.xtf", + "sha256": "1af4b0b752685b154761c4ada2b89c607dde8f788ea9a9a794a1e44f6c0f09f0", + "modelSet": "suite", + "ruleGroup": "reference-attribute", + "phases": ["P4.2", "P4.4"], + "norm": {"sections": ["2.6.3", "3.3.11.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/StructureReferenceAttributeTest.java", "method": "RStReA_T02a", "line": 101}, + "documentation": {"path": "doc/attributes.md", "line": 145, "expectedAcceptance": true} + }, + { + "id": "RStReA.T02b", + "xtf": "data/RStReA.T02b.xtf", + "sha256": "7dd4a68c0e3842ddca415196790a093d0a13bbc7bfd7f9bdaaac674e4aa8c814", + "modelSet": "suite", + "ruleGroup": "reference-attribute", + "phases": ["P4.2", "P4.4"], + "norm": {"sections": ["2.6.3", "3.3.11.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/StructureReferenceAttributeTest.java", "method": "RStReA_T02b", "line": 121}, + "documentation": {"path": "doc/attributes.md", "line": 145, "expectedAcceptance": true} + }, + { + "id": "RStReA.T02c", + "xtf": "data/RStReA.T02c.xtf", + "sha256": "960c620596490c7fe4f5f72271c6cb4316dea8f387cc77c37c608a96a36b6ed6", + "modelSet": "suite", + "ruleGroup": "reference-attribute", + "phases": ["P4.2", "P4.4"], + "norm": {"sections": ["2.6.3", "3.3.11.14"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/StructureReferenceAttributeTest.java", "method": "RStReA_T02c", "line": 141}, + "documentation": {"path": "doc/attributes.md", "line": 145, "expectedAcceptance": true} + }, + { + "id": "RTO.T01a", + "xtf": "data/RTO.T01a.xtf", + "sha256": "ca60051af27c019756fcf84cc596ea6e9560165c3e4b802807ad1b3b1c99e623", + "modelSet": "suite", + "ruleGroup": "basket", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.9", "3.3.1"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T01a", "line": 42}, + "documentation": {"path": "doc/topic.md", "line": 18, "expectedAcceptance": false} + }, + { + "id": "RTO.T02a", + "xtf": "data/RTO.T02a.xtf", + "sha256": "a14103c1d124565c8916a0555e1189a83ad7b3136c7fbcff61ce9b8614eac071", + "modelSet": "suite", + "ruleGroup": "basket", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.9", "3.3.1"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T02a", "line": 62}, + "documentation": {"path": "doc/topic.md", "line": 27, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ilivalidator", "reason": "Missing BID raises IllegalArgumentException in the historical API.", "active": true}] + }, + { + "id": "RTO.T02b", + "xtf": "data/RTO.T02b.xtf", + "sha256": "f494dd1141ab4c0cabcd061f47e35123b614ab3e9a7d6f8ed0322b97ab75fe64", + "modelSet": "suite", + "ruleGroup": "basket", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.9", "3.3.1"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T02b", "line": 84}, + "documentation": {"path": "doc/topic.md", "line": 27, "expectedAcceptance": false} + }, + { + "id": "RTO.T02c", + "xtf": "data/RTO.T02c.xtf", + "sha256": "abd8f2fecdb80273e58280b1610dc79c801a58f5aa996131060dd760d70ad3e8", + "modelSet": "suite", + "ruleGroup": "basket", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.9", "3.3.1"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T02c", "line": 104}, + "documentation": {"path": "doc/topic.md", "line": 27, "expectedAcceptance": false} + }, + { + "id": "RTO.T02d", + "xtf": "data/RTO.T02d.xtf", + "sha256": "0a7a122fd5fd56a774fa033b18914e1de0bc2cb2a5756eb7fc2bf6984ef724b6", + "modelSet": "suite", + "ruleGroup": "basket", + "phases": ["P4.2"], + "norm": {"sections": ["2.8.9", "3.3.1"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T02d", "line": 124}, + "documentation": {"path": "doc/topic.md", "line": 27, "expectedAcceptance": false} + }, + { + "id": "RTO.T03a", + "xtf": "data/RTO.T03a.xtf", + "sha256": "90ec5acb2b0e4d7898859ae6e807d3c4ecdecc28375b68748a273c4e572e8637", + "modelSet": "suite", + "ruleGroup": "object-identity", + "phases": ["P4.4"], + "norm": {"sections": ["3.2.6", "3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T03a", "line": 144}, + "documentation": {"path": "doc/topic.md", "line": 36, "expectedAcceptance": false} + }, + { + "id": "RTO.T03b", + "xtf": "data/RTO.T03b.xtf", + "sha256": "a1d3690570f63c90a3b599d0b8a77689bfd7084eadbf73fcf98a0921c0c8e716", + "modelSet": "suite", + "ruleGroup": "object-identity", + "phases": ["P4.4"], + "norm": {"sections": ["3.2.6", "3.3.7"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T03b", "line": 164}, + "documentation": {"path": "doc/topic.md", "line": 36, "expectedAcceptance": false} + }, + { + "id": "RTO.T04a", + "xtf": "data/RTO.T04a.xtf", + "sha256": "2d1f22b46c2f08704d1c20f27b483490ece429b4d5c999f9b031301035040d4a", + "modelSet": "suite", + "ruleGroup": "basket", + "phases": ["P4.2"], + "norm": {"sections": ["3.2.5"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T04a", "line": 183}, + "documentation": {"path": "doc/topic.md", "line": 45, "expectedAcceptance": true}, + "notes": ["Upstream leaves the norm reference blank. Section 3.2.5 directly covers baskets from different models."] + }, + { + "id": "RTO.T05a", + "xtf": "data/RTO.T05a.xtf", + "sha256": "1c7e66ee75eb60d72291e888ab5f2767eda634be09d9163ff4838809715f6276", + "modelSet": "suite", + "ruleGroup": "basket", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.3", "3.3.5", "3.3.6"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T05a", "line": 203}, + "documentation": {"path": "doc/topic.md", "line": 53, "expectedAcceptance": true} + }, + { + "id": "RTO.T05b", + "xtf": "data/RTO.T05b.xtf", + "sha256": "8b651d7b89dc62bccb6cda596fa0183349d5c5de272989516892f48eaa6af0e0", + "modelSet": "suite", + "ruleGroup": "basket", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.3", "3.3.5", "3.3.6"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T05b", "line": 223}, + "documentation": {"path": "doc/topic.md", "line": 53, "expectedAcceptance": true} + }, + { + "id": "RTO.T06a", + "xtf": "data/RTO.T06a.xtf", + "sha256": "0399b09076b54ac6d91103e40f53a16cbf2abea8794ee56284066f8d77f4ad48", + "modelSet": "roads", + "ruleGroup": "basket", + "phases": ["P4.2"], + "norm": {"sections": ["2.5.1", "Appendix C"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T06a", "line": 243}, + "documentation": {"path": "doc/topic.md", "line": 62, "expectedAcceptance": true}, + "notes": ["XTF comment names RTR.T06a. The stable ID comes from the Java test."] + }, + { + "id": "RTO.T06b", + "xtf": "data/RTO.T06b.xtf", + "sha256": "a33d7230e7470dcaf9ac5e31456f7ca268c8349fff48f7b7a5efebdd0307a879", + "modelSet": "roads", + "ruleGroup": "basket", + "phases": ["P4.2"], + "norm": {"sections": ["2.5.1", "Appendix C"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T06b", "line": 263}, + "documentation": {"path": "doc/topic.md", "line": 62, "expectedAcceptance": true}, + "notes": ["XTF comment names RTR.T06b. The stable ID comes from the Java test."] + }, + { + "id": "RTO.T06c", + "xtf": "data/RTO.T06c.xtf", + "sha256": "1cc7f6a1f812e50d0e94252a489cfcf1116f58d0a239b231cb8f507a4d7bf50c", + "modelSet": "roads", + "ruleGroup": "basket", + "phases": ["P4.2", "P4.4"], + "norm": {"sections": ["2.5.1", "2.5.3", "3.3.6", "3.3.9.1", "Appendix C"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TopicTest.java", "method": "RTO_T06c", "line": 283}, + "documentation": {"path": "doc/topic.md", "line": 62, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ig/check", "reason": "Diagnostic differs from the expected basket rejection.", "active": true}], + "notes": ["XTF comment names RTR.T06c. The stable ID comes from the Java test."] + }, + { + "id": "RTR.T01a", + "xtf": "data/RTR.T01a.xtf", + "sha256": "69d1862ad74b1c3cb3f3b3f969b784c08fd7f5fecbf7d0ff634f417ccba7d9b8", + "modelSet": "suite", + "ruleGroup": "transfer-structure", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TransferStructureTest.java", "method": "RTR_T01a", "line": 43}, + "documentation": {"path": "doc/transferStructure.md", "line": 18, "expectedAcceptance": false} + }, + { + "id": "RTR.T02a", + "xtf": "data/RTR.T02a.xtf", + "sha256": "fc9daac01cdb47c5b32ad3080f0fa49b949374e7936934065498d9422ac0990f", + "modelSet": "suite", + "ruleGroup": "transfer-structure", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TransferStructureTest.java", "method": "RTR_T02a", "line": 63}, + "documentation": {"path": "doc/transferStructure.md", "line": 29, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ilivalidator", "reason": "Diagnostic reported as wrong or incomplete.", "active": true}] + }, + { + "id": "RTR.T02b", + "xtf": "data/RTR.T02b.xtf", + "sha256": "cad71595c1ebe4da59bd71ae0ba5825d9a815ac3dd1e61b6e1690c584858fc3f", + "modelSet": "suite", + "ruleGroup": "transfer-structure", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TransferStructureTest.java", "method": "RTR_T02b", "line": 85}, + "documentation": {"path": "doc/transferStructure.md", "line": 29, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ilivalidator", "reason": "Commented assumption mentions a wrong diagnostic.", "active": false}], + "notes": ["The omitted header is the defect. Basket tags identify the local TestSuite model."] + }, + { + "id": "RTR.T02c", + "xtf": "data/RTR.T02c.xtf", + "sha256": "664faf67824b10e99e4ad0f15e487dfee0c85fc70526be032ad04a8438935857", + "modelSet": "suite", + "ruleGroup": "transfer-structure", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TransferStructureTest.java", "method": "RTR_T02c", "line": 107}, + "documentation": {"path": "doc/transferStructure.md", "line": 29, "expectedAcceptance": false} + }, + { + "id": "RTR.T03a", + "xtf": "data/RTR.T03a.xtf", + "sha256": "509119c6aa1c6cbed5788664fe06d962d71e4dc4cc100774ab54a6e80852a628", + "modelSet": "suite", + "ruleGroup": "transfer-structure", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TransferStructureTest.java", "method": "RTR_T03a", "line": 127}, + "documentation": {"path": "doc/transferStructure.md", "line": 38, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ilivalidator", "reason": "Commented assumption mentions a wrong diagnostic.", "active": false}] + }, + { + "id": "RTR.T04a", + "xtf": "data/RTR.T04a.xtf", + "sha256": "6b38e392ee6d05c7699eb34d50546f315fb6e952e6c2b22dd9483a7d686b6bd1", + "modelSet": "suite", + "ruleGroup": "transfer-structure", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/TransferStructureTest.java", "method": "RTR_T04a", "line": 149}, + "documentation": {"path": "doc/transferStructure.md", "line": 47, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ilivalidator", "reason": "Diagnostic differs from the expected namespace rejection.", "active": true}] + }, + { + "id": "RXW.T01a", + "xtf": "data/RXW.T01a.xtf", + "sha256": "5cbbdd038f8ec8620b066d8544e9bc83136fe27ad1fe1ddee667bc7bb32dedb5", + "modelSet": "suite", + "ruleGroup": "xml", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.1", "3.3.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/XmlTest.java", "method": "RXW_T01a", "line": 43}, + "documentation": {"path": "doc/xml.md", "line": 24, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ig/check", "reason": "Commented assumption mentions a wrong diagnostic.", "active": false}] + }, + { + "id": "RXW.T01b", + "xtf": "data/RXW.T01b.xtf", + "sha256": "089b6897adf845ac3befc6be38e9b7ab8943a53e8eab52335049e40ea052761f", + "modelSet": "suite", + "ruleGroup": "xml", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.1", "3.3.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/XmlTest.java", "method": "RXW_T01b", "line": 66}, + "documentation": {"path": "doc/xml.md", "line": 24, "expectedAcceptance": false} + }, + { + "id": "RXW.T02a", + "xtf": "data/RXW.T02a.xtf", + "sha256": "5a1bb1d213eff15275f21dcfc782b47717802120aee458a9c9851fc0c0a63d2f", + "modelSet": "suite", + "ruleGroup": "xml", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.1"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/XmlTest.java", "method": "RXW_T02a", "line": 86}, + "documentation": {"path": "doc/xml.md", "line": 33, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ilivalidator", "reason": "Diagnostic differs from the expected XML rejection.", "active": true}] + }, + { + "id": "RXW.T02b", + "xtf": "data/RXW.T02b.xtf", + "sha256": "5762329c93a40f1807cff47bd68518757e7232138acd6c8523a69f61cf6605bb", + "modelSet": "suite", + "ruleGroup": "xml", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.1"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/XmlTest.java", "method": "RXW_T02b", "line": 108}, + "documentation": {"path": "doc/xml.md", "line": 33, "expectedAcceptance": true} + }, + { + "id": "RXW.T02c", + "xtf": "data/RXW.T02c.xtf", + "sha256": "544dce7bce3d4e18845a9c044e88a81fb98074e25ca97ec171f00d87d912c289", + "modelSet": "suite", + "ruleGroup": "xml", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.1"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/XmlTest.java", "method": "RXW_T02c", "line": 128}, + "documentation": {"path": "doc/xml.md", "line": 33, "expectedAcceptance": false} + }, + { + "id": "RXW.T02d", + "xtf": "data/RXW.T02d.xtf", + "sha256": "4b7f6251bbba745629016514cbf6c94d9c15bf86602f355850262823dee6939a", + "modelSet": "suite", + "ruleGroup": "xml", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.1"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/XmlTest.java", "method": "RXW_T02d", "line": 149}, + "documentation": {"path": "doc/xml.md", "line": 33, "expectedAcceptance": false} + }, + { + "id": "RXW.T02e", + "xtf": "data/RXW.T02e.xtf", + "sha256": "cb2c96313cf9122dc843aad668fd072e65339ef25dff0b6892eff0e5ab6b48c3", + "modelSet": "suite", + "ruleGroup": "xml", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.1"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/XmlTest.java", "method": "RXW_T02e", "line": 170}, + "documentation": {"path": "doc/xml.md", "line": 33, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ilivalidator", "reason": "Commented assumption mentions a wrong diagnostic.", "active": false}] + }, + { + "id": "RXW.T02f", + "xtf": "data/RXW.T02f.xtf", + "sha256": "8fd157060df40320b35590cb2a36ba0cc738c63224faa142b25c57d0d739fe3d", + "modelSet": "suite", + "ruleGroup": "xml", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.1"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/XmlTest.java", "method": "RXW_T02f", "line": 193}, + "documentation": {"path": "doc/xml.md", "line": 33, "expectedAcceptance": false}, + "vendorSkips": [{"profile": "ilivalidator", "reason": "Commented assumption mentions a wrong diagnostic.", "active": false}], + "notes": ["XTF comment names RXW.T02e. The stable ID comes from the Java test."] + }, + { + "id": "RZe.T01a", + "xtf": "data/RZe.T01a.xtf", + "sha256": "a25aea565a223d65df72ed68ce790c876d023f2ba688df883a61a085a292e53c", + "modelSet": "suite", + "ruleGroup": "character-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.2"]}, + "expectedAcceptance": true, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CharacterEncodingTest.java", "method": "RZe_T01a", "line": 42}, + "documentation": {"path": "doc/charEncoding.md", "line": 17, "expectedAcceptance": true} + }, + { + "id": "RZe.T01b", + "xtf": "data/RZe.T01b.xtf", + "sha256": "3ff248ba4f998e10bd995134ce971450344b2fc8d86382c703d85f6a521e34cb", + "modelSet": "suite", + "ruleGroup": "character-encoding", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.2"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CharacterEncodingTest.java", "method": "RZe_T01b", "line": 62}, + "documentation": {"path": "doc/charEncoding.md", "line": 17, "expectedAcceptance": false}, + "encoding": "invalid-utf-8", + "notes": ["The XML declaration says UTF-8, but the first non-ASCII byte at offset 528 is invalid in UTF-8."] + }, + { + "id": "RZe.T01c", + "xtf": "data/RZe.T01c.xtf", + "sha256": "64e584374578488a24406ba60113ab6f65ffa3aee87723dcdc61b840e043ab81", + "modelSet": "suite", + "ruleGroup": "xml", + "phases": ["P4.2"], + "norm": {"sections": ["3.3.1", "3.3.3"]}, + "expectedAcceptance": false, + "oracleStatus": "AGREES", + "java": {"path": "routine/src/test/java/ch/interlis/testsuite/CharacterEncodingTest.java", "method": "RZe_T01c", "line": 82}, + "documentation": {"path": "doc/charEncoding.md", "line": 17, "expectedAcceptance": false}, + "encoding": "utf-8", + "notes": ["Documentation describes invalid UTF-8. The bytes decode as UTF-8 and contain a malformed XML character reference."] + } + ] +} diff --git a/tools/iox-reference-harness/README.md b/tools/iox-reference-harness/README.md index 5c5c403b..2ffb5015 100644 --- a/tools/iox-reference-harness/README.md +++ b/tools/iox-reference-harness/README.md @@ -71,6 +71,33 @@ Teilereignisse und einen strukturierten IOX-Fehler auf stderr geprüft. python3 -B tools/iox-reference-harness/test_run.py ``` +## Externe Validator-Testsuite für XTF 2.3 + +Der [Fallkatalog](../../testdata/reference/suite-interlis/cases.json) erschliesst +223 Originalfälle aus [suite-interlis](https://github.com/geostandards-ch/suite-interlis). +Lege den gepinnten Checkout ausserhalb des Produktrepositorys an. + +```sh +git clone --no-checkout https://github.com/geostandards-ch/suite-interlis.git /tmp/suite-interlis +git -C /tmp/suite-interlis checkout --detach f30711184d2374feacb81c5742382d35597164ca +python3 -B tools/iox-reference-harness/suite_inventory.py --checkout /tmp/suite-interlis +python3 -B tools/iox-reference-harness/test_suite_inventory.py +``` + +Die Inventarprüfung läuft offline. Sie prüft den Git-Pin, die SHA-256-Werte +der XTF- und Modelldateien, die Java-Assertions und die referenzierten +Ergebniszeilen der englischen Dokumentation. Die Pfade und Zeilen im Katalog +beziehen sich auf den gepinnten Checkout. Die Normabschnitte beziehen sich +standardmässig auf das [Referenzhandbuch 2.3 vom 13. April 2006](../../testdata/reference/norms/documents.json). +Historische Annahmen und Skips gehören zu den jeweils ausgewiesenen +Originalprofilen, darunter ilivalidator 1.11.14. + +`phases` ordnet einen Fall dem XTF-2.3-Format (P4.2), der Datenvalidierung +(P4.4 und folgende) oder der Geometrie- und Topologieprüfung (G1 und +folgende) zu. Bei mehreren Phasen braucht jede ihren eigenen Nachweis. +Für P4.3 werden getrennte XTF-2.4-Fälle nach versionsspezifischer Prüfung +benötigt. Ein erfolgreicher Inventarlauf bestätigt Quellen und Erwartungen. + ## Korpus und beobachteter Lauf Die [Fallliste](../../testdata/reference/iox/cases.json) registriert die diff --git a/tools/iox-reference-harness/suite_inventory.py b/tools/iox-reference-harness/suite_inventory.py new file mode 100644 index 00000000..ae289a3f --- /dev/null +++ b/tools/iox-reference-harness/suite_inventory.py @@ -0,0 +1,324 @@ +#!/usr/bin/env python3 +"""Verify the suite-interlis catalog against its external Git checkout.""" + +import argparse +import json +import os +from pathlib import Path +import re +import subprocess +import sys + +from run import HARNESS, sha256 + + +CATALOG_FILE = HARNESS.parents[1] / "testdata/reference/suite-interlis/cases.json" +UPSTREAM_URL = "https://github.com/geostandards-ch/suite-interlis" +UPSTREAM_COMMIT = "f30711184d2374feacb81c5742382d35597164ca" +XTF_COUNT, MODEL_COUNT, TEST_CLASS_COUNT = 223, 9, 17 +XTF_PATH = r"data/[A-Za-z0-9.]+\.xtf" +MODEL_PATH = r"data/models/[A-Za-z0-9_.-]+\.ili" +JAVA_PATH = r"routine/src/test/java/ch/interlis/testsuite/[A-Za-z]+Test\.java" +DOC_PATH = r"doc/[A-Za-z]+\.md" +CASE_ID = r"[A-Za-z]+\.T[0-9]+[a-z]" +PHASES = {"P4.2", "P4.4", "G1"} +RULE_GROUPS = { + "xml", "character-encoding", "header", "transfer-structure", "basket", "object-identity", + "object-encoding", "attribute-value", "attribute-cardinality", "attribute-order", "object-order", + "structure-attribute", "reference-attribute", "association-encoding", "association-target", + "association-cardinality", "local-constraint", "global-constraint", "coordinate", "polyline", + "area-surface", "area-constraint", +} +ROUTINE_PROFILES = {"ilivalidator": "1.11.14", "ig/check": "2018.0.695"} + + +def require(condition, message): + if not condition: + raise ValueError(message) + + +def record(value, required, optional, label): + require(isinstance(value, dict), f"Expected an object for {label}") + missing = set(required) - value.keys() + extra = value.keys() - set(required) - set(optional) + require(not missing and not extra, + f"Invalid fields in {label} (missing {sorted(missing)}, unexpected {sorted(extra)})") + + +def unique_object(pairs): + obj = {} + for key, value in pairs: + require(key not in obj, f"Duplicate JSON field: {key}") + obj[key] = value + return obj + + +def text(value): + return isinstance(value, str) and bool(value.strip()) + + +def matches(pattern, value): + return isinstance(value, str) and re.fullmatch(pattern, value) is not None + + +def text_list(value): + return isinstance(value, list) and bool(value) and all(map(text, value)) and len(set(value)) == len(value) + + +def acceptance(value): + return type(value) is bool or value == "unknown" + + +def source_reference(source, pattern, field, case_id): + record(source, ("path", "line", field), (), f"{case_id} source") + require(matches(pattern, source["path"]) and type(source["line"]) is int and source["line"] > 0, + f"Invalid {field} source location for {case_id}") + + +def validate_case(case, model_sets): + record(case, ( + "id", "xtf", "sha256", "modelSet", "ruleGroup", "phases", "norm", + "expectedAcceptance", "oracleStatus", "java", "documentation", + ), ("notes", "vendorSkips", "encoding"), "case") + case_id = case["id"] + require(matches(CASE_ID, case_id), f"Invalid case ID: {case_id!r}") + require(matches(XTF_PATH, case["xtf"]) and matches(r"[0-9a-f]{64}", case["sha256"]), + f"Invalid XTF path or SHA-256 for {case_id}") + require(text(case["modelSet"]) and case["modelSet"] in model_sets, + f"Unknown model set for {case_id}") + require(text(case["ruleGroup"]) and case["ruleGroup"] in RULE_GROUPS, + f"Unknown rule group for {case_id}") + require(text_list(case["phases"]) and set(case["phases"]) <= PHASES, + f"Invalid implementation phases for {case_id}") + if "encoding" in case: + require(case["encoding"] in ("utf-8", "invalid-utf-8"), f"Invalid encoding for {case_id}") + + norm = case["norm"] + record(norm, ("sections",), ("source", "openDecision"), f"{case_id} norm") + require(text_list(norm["sections"]), f"Missing or invalid norm sections for {case_id}") + require(all(text(value) for key, value in norm.items() if key != "sections"), + f"Invalid norm source or decision for {case_id}") + + java = case["java"] + source_reference(java, JAVA_PATH, "method", case_id) + require(matches(r"[A-Za-z][A-Za-z0-9_]*", java["method"]), f"Invalid Java method for {case_id}") + doc = case["documentation"] + source_reference(doc, DOC_PATH, "expectedAcceptance", case_id) + expected, documented = case["expectedAcceptance"], doc["expectedAcceptance"] + require(acceptance(expected) and acceptance(documented), f"Invalid expectation for {case_id}") + oracle = case["oracleStatus"] + require(oracle in ("AGREES", "CONFLICT", "DOCUMENTATION_GAP"), f"Unknown oracle status for {case_id}") + if "notes" in case: + require(text_list(case["notes"]), f"Invalid source notes for {case_id}") + if oracle == "DOCUMENTATION_GAP": + require(documented == "unknown" and case.get("notes"), f"Unexplained documentation gap for {case_id}") + else: + require(type(expected) is bool and type(documented) is bool + and (expected == documented) == (oracle == "AGREES"), + f"Inconsistent oracle expectations for {case_id}") + + if "vendorSkips" in case: + skips = case["vendorSkips"] + require(isinstance(skips, list) and skips, f"Invalid vendor skips for {case_id}") + seen = set() + for skip in skips: + record(skip, ("profile", "reason", "active"), (), f"{case_id} vendor skip") + require(text(skip["profile"]) and skip["profile"] in ROUTINE_PROFILES + and text(skip["reason"]) and type(skip["active"]) is bool, + f"Invalid vendor skip for {case_id}") + require(skip["profile"] not in seen, f"Duplicate vendor skip for {case_id}") + seen.add(skip["profile"]) + + +def load_catalog(path=CATALOG_FILE): + """Read and validate all metadata before selecting or checking inputs.""" + catalog = json.loads(Path(path).read_text(encoding="utf-8"), object_pairs_hook=unique_object) + record(catalog, ("schema", "upstream", "models", "modelSets", "cases"), (), "catalog") + require(type(catalog["schema"]) is int and catalog["schema"] == 1, "Unsupported catalog schema") + upstream = catalog["upstream"] + record(upstream, ("url", "commit", "transferVersion", "routineProfiles"), (), "upstream") + require(upstream["url"] == UPSTREAM_URL and upstream["commit"] == UPSTREAM_COMMIT, + "Wrong upstream URL or commit pin") + require(upstream["transferVersion"] == "2.3" and upstream["routineProfiles"] == ROUTINE_PROFILES, + "Invalid upstream transfer version or routine profiles") + + models = catalog["models"] + require(isinstance(models, dict) and len(models) == MODEL_COUNT, "Expected 9 pinned models") + for model, digest in models.items(): + require(matches(MODEL_PATH, model) and matches(r"[0-9a-f]{64}", digest), + f"Invalid model path or SHA-256: {model!r}") + model_sets = catalog["modelSets"] + require(isinstance(model_sets, dict) and model_sets, "Missing model sets") + listed_models = set() + for name, paths in model_sets.items(): + require(text(name) and text_list(paths) and set(paths) <= models.keys(), f"Invalid model set: {name!r}") + listed_models.update(paths) + require(listed_models == models.keys(), "Model sets do not cover the pinned models") + + cases = catalog["cases"] + require(isinstance(cases, list) and len(cases) == XTF_COUNT, "Expected 223 catalog cases") + ids, xtfs, methods, used_model_sets = set(), set(), set(), set() + for case in cases: + validate_case(case, model_sets) + java = case["java"] + method = (java["path"], java["method"]) + require(case["id"] not in ids, f"Duplicate case ID: {case['id']}") + require(case["xtf"] not in xtfs, f"Duplicate XTF path: {case['xtf']}") + require(method not in methods, f"Duplicate Java source method: {method}") + ids.add(case["id"]) + xtfs.add(case["xtf"]) + methods.add(method) + used_model_sets.add(case["modelSet"]) + require(len({path for path, _ in methods}) == TEST_CLASS_COUNT, "Expected 17 Java test classes") + require(used_model_sets == model_sets.keys(), "Catalog has unused model sets") + return catalog + + +def git(checkout, *args): + env = {key: value for key, value in os.environ.items() if not key.startswith("GIT_")} + try: + result = subprocess.run([ + "git", "--no-replace-objects", "--no-optional-locks", "-c", "core.fsmonitor=false", + "-C", str(checkout), *args, + ], env=env, capture_output=True, timeout=15) + except (OSError, subprocess.TimeoutExpired) as error: + raise ValueError(f"Git checkout check failed: {error}") from error + if result.returncode: + stderr = result.stderr.decode("utf-8", errors="replace").strip() + raise ValueError(f"Git {args[0]} failed for checkout {checkout}: {stderr}") + return result.stdout + + +def verify_checkout(checkout, commit): + """Require the pinned HEAD at a Git checkout root. Return its canonical path.""" + root = Path(checkout).resolve() + require(root.is_dir(), f"Missing checkout directory: {root}") + require(not root.is_relative_to(HARNESS.parents[1]), f"Expected checkout outside the product repository: {root}") + actual_root = git(root, "rev-parse", "--show-toplevel").decode("utf-8").rstrip("\n") + require(Path(actual_root).resolve() == root, f"Expected Git checkout root: {root}") + head = git(root, "rev-parse", "--verify", "HEAD").decode("ascii").strip() + require(head == commit, f"Wrong checkout pin: expected {commit}, found {head}") + return root + + +def original_file(checkout, path): + require(isinstance(path, str) and not any(character in path for character in ("\\", ":", "\0")), + f"Invalid original path: {path!r}") + parts = path.split("/") + require(all(part not in ("", ".", "..") for part in parts), f"Invalid original path: {path!r}") + location = Path(checkout) + for part in parts: + location /= part + require(not location.is_symlink(), f"Symlink in original path: {location}") + require(location.is_file(), f"Missing original file: {location}") + return location + + +def verify_input(checkout, path, digest): + """Verify one original file and return the path to its verified bytes.""" + location = original_file(checkout, path) + actual = sha256(location) + require(actual == digest, f"SHA-256 mismatch for {path}: expected {digest}, found {actual}") + return location + + +def source_text(checkout, commit, path): + actual = original_file(checkout, path).read_bytes() + require(actual == git(checkout, "show", f"{commit}:{path}"), f"Changed original source: {path}") + return actual.decode("utf-8") + + +def java_cases(source, path): + # The pinned JUnit sources use one straight-line method and Javadoc block per case. + methods = list(re.finditer( + r"/\*\*((?:(?!\*/).)*)\*/\s*(@Test)\s+public void (\w+)\(\)\s*\{([^}]*)\}", source, re.S)) + require(len(methods) == len(re.findall(r"(?m)^[ \t]*@Test\b", source)) + and not re.search(r"(?m)^[ \t]*@Ignore\b", source), f"Unaccounted JUnit test or ignore: {path}") + for method in methods: + javadoc, _, name, body = method.groups() + ids = re.findall(r"(?m)^[ \t]*\*[ \t]*@ID[ \t]+(\S+)", javadoc) + xtfs = re.findall(r'TestUtil\.runJob\(vendor,\s*"\.\./(data/[^\"]+\.xtf)"\)', body) + assertions = re.findall(r"(?m)^[ \t]*assert(True|False)\(ret\);", body) + require(len(ids) == len(xtfs) == len(assertions) == 1, f"Unaccounted Java oracle: {path}#{name}") + skips = {(profile, not comment) for comment, profile in re.findall( + r'(?m)^[ \t]*(//[ \t]*)?assumeFalse\s*\(System\.getProperty\("vendor"\)\.equals\("([^\"]+)"\)\);', + body)} + yield ids[0], (path, name, source.count("\n", 0, method.start(2)) + 1, + xtfs[0], assertions[0] == "True", skips) + + +def doc_expectation(lines, source, case_id): + index = source["line"] - 1 + require(index < len(lines) and lines[index].startswith("|**Expected result**|"), + f"Wrong documentation expectation row for {case_id}") + group = next((line for line in reversed(lines[:index]) if line.startswith("|ID|")), "") + require(group.strip() == f"|ID|{case_id[:-1]}", f"Wrong documentation rule for {case_id}") + mentions = re.findall(r"(? Date: Fri, 6 Nov 2026 21:50:03 +0100 Subject: [PATCH 3/4] Run selected suite-interlis originals with the pinned validator --- tools/iox-reference-harness/README.md | 31 ++- tools/iox-reference-harness/suite_result.py | 166 ++++++++++++++++ tools/iox-reference-harness/suite_run.py | 180 ++++++++++++++++++ .../test_suite_result.py | 143 ++++++++++++++ 4 files changed, 519 insertions(+), 1 deletion(-) create mode 100644 tools/iox-reference-harness/suite_result.py create mode 100644 tools/iox-reference-harness/suite_run.py create mode 100644 tools/iox-reference-harness/test_suite_result.py diff --git a/tools/iox-reference-harness/README.md b/tools/iox-reference-harness/README.md index 2ffb5015..96a4a6dc 100644 --- a/tools/iox-reference-harness/README.md +++ b/tools/iox-reference-harness/README.md @@ -75,7 +75,8 @@ python3 -B tools/iox-reference-harness/test_run.py Der [Fallkatalog](../../testdata/reference/suite-interlis/cases.json) erschliesst 223 Originalfälle aus [suite-interlis](https://github.com/geostandards-ch/suite-interlis). -Lege den gepinnten Checkout ausserhalb des Produktrepositorys an. +Am Pin ist keine eigenständige Lizenzdatei verzeichnet. Lege den +gepinnten Checkout ausserhalb des Produktrepositorys an. ```sh git clone --no-checkout https://github.com/geostandards-ch/suite-interlis.git /tmp/suite-interlis @@ -98,6 +99,34 @@ folgende) zu. Bei mehreren Phasen braucht jede ihren eigenen Nachweis. Für P4.3 werden getrennte XTF-2.4-Fälle nach versionsspezifischer Prüfung benötigt. Ein erfolgreicher Inventarlauf bestätigt Quellen und Erwartungen. +### Einzelne Originalfälle mit ilivalidator ausführen + +```sh +python3 -B tools/iox-reference-harness/suite_run.py \ + --checkout /tmp/suite-interlis --archive /absolute/ilivalidator-1.15.0.zip \ + --case RXW.T02b --case RKo.T06c --output /tmp/suite-interlis-run +python3 -B tools/iox-reference-harness/test_suite_result.py +``` + +Der Runner verlangt das lokale ZIP aus [dem bestehenden Lock](legacy-lock.json). +Er prüft den Git-Pin und die Eingabehashes der ausgewählten Fälle. Pro Fall +startet er ilivalidator 1.15.0 mit `-Xmx2g`, einem isolierten Arbeitsverzeichnis +und ausschliesslich den geprüften lokalen Modellen. Das neue Ausgabeverzeichnis +enthält `report.json` und die gehashten Rohstreams je ausgeführtem Fall. +Ohne `--output` wird ein temporäres Verzeichnis angelegt. Pro Aufruf sind bis +zu zwölf IDs und pro Prozess bis zu 30 Sekunden vorgesehen. + +Der Bericht trennt die Upstream-Erwartung, den Normbezug, die tatsächliche +Beobachtung und den Vergleich. Eine bestätigte Akzeptanz setzt beide +Validierungspässe voraus. Bei einer erwarteten Ablehnung müssen der +kontrollierte Prozessabschluss und die fallspezifische Diagnose +übereinstimmen. Für weitere Negativfälle kann der Runner den Prozess +beobachten, auch wenn die fachliche Ablehnung noch keinen Vergleichsmassstab +für 1.15.0 hat. Bei `RHE.T01a` endet 1.15.0 beispielsweise bereits bei der +Modellerkennung. Der JVM-Exit allein bestätigt die beabsichtigte +Headerprüfung nicht. Der Runner liefert Exit 0, wenn alle ausgewählten +Fälle `PASS` erreichen. + ## Korpus und beobachteter Lauf Die [Fallliste](../../testdata/reference/iox/cases.json) registriert die diff --git a/tools/iox-reference-harness/suite_result.py b/tools/iox-reference-harness/suite_result.py new file mode 100644 index 00000000..6521f777 --- /dev/null +++ b/tools/iox-reference-harness/suite_result.py @@ -0,0 +1,166 @@ +"""Classify the pinned ilivalidator process separately from the suite oracle.""" + +from collections import Counter +import re + +from run import FATAL_LOG + + +VERSION_TOOLS = ("ilivalidator", "ili2c", "iox-ili") +VERSION_PREFIXES = tuple(f"Info: {tool}-" for tool in VERSION_TOOLS) +FIRST_PASS = "Info: first validation pass..." +SECOND_PASS = "Info: second validation pass..." +DONE = "Info: ...validation done" +FAILED = "Info: ...validation failed" +LIFECYCLE = {FIRST_PASS, SECOND_PASS, DONE, FAILED} +MODEL_NOT_FOUND = re.compile(r"Error: ([\w]+(?:, [\w]+)*): model\(s\) not found") +RUNTIME_FAILURE = re.compile( + r"Exception in thread|(?:Caused by|Suppressed):|" + r"\b(?:java|javax|jdk|sun)\.[\w.$]*(?:Exception|Error)\b|" + r"\bat [\w.$]+\([^\r\n]*\.java:\d+\)" +) + +# The diagnostics are tied to these unchanged originals and the existing 1.15.0 lock. +REJECTIONS = { + "RTO.T03a": ( + "Error: TestSuite.GebaeudeRegister: tid TestSuite.Bodenbedeckung: BID TestSuite.Bodenbedeckung " + "of TestSuite.GebaeudeRegister already exists in TestSuite.Bodenbedeckung", + ), + "RAt.T02b": ( + "Error: line 12: TestSuite.Bodenbedeckung.GebaeudeArt: tid ga4: Attribute Art3 is length restricted to 3", + ), + "RKB.T01c": ( + "Error: line 12: TestSuite.Kardinalitaet.A: tid a1: " + "RolleB should associate 1 to 1 target objects (instead of 2)", + ), + "RKo.T01b": ( + "Error: line 15: TestSuite.Bodenbedeckung.Geschichte: tid ges2: Unique constraint " + "TestSuite.Bodenbedeckung.Geschichte.Constraint1 is violated! Values A already exist in Object: ges1", + ), + "RKo.T06c": ( + "Error: line 15: TestSuite.Bodenbedeckung.Gebaeude: tid geb1: Mandatory Constraint " + "TestSuite.Bodenbedeckung.Gebaeude.Constraint1 is not true.", + ), + "RPO.T02b": ( + "Error: line 12: TestSuite.Bodenbedeckung.BoLinien: tid bl8: " + "Attribute Form has an invalid self-intersection at (2480110.0, 1060130.0)", + ), + "RSU.T01a": ( + "Error: TestSuite.Bodenbedeckung.BoFlaechen: tid f7: Overlay " + "coord1 (2480120.000, 1060110.000), coord2 (2480120.000, 1060125.000), tids f7, f8", + "Error: TestSuite.Bodenbedeckung.BoFlaechen: tid f7: Overlay " + "coord1 (2480120.000, 1060125.000), coord2 (2480120.000, 1060140.000), tids f7, f8", + "Error: failed to validate AREA TestSuite.Bodenbedeckung.BoFlaechen.Form", + ), +} +XML_CASE = "RXW.T01b" +XML_EXCEPTION = "Error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[31,11]" +XML_ERROR = "Error: ParseError at [row,col]:[31,11]" +XML_MESSAGE = """Message: The end-tag for element type "TRANSFER" must end with a '>' delimiter.""" +XML_REJECTION = [XML_EXCEPTION, XML_MESSAGE, XML_ERROR, XML_MESSAGE] + + +def classify(case, process, stdout, stderr, versions): + """Return the observed process state and the comparison with the Java assertion.""" + case_id = case["id"] + lines, diagnostics, unexpected, diagnostic_positions = [], [], [], [] + for stream in (stdout, stderr): + previous = None + for line in stream.splitlines(): + xml_message = case_id == XML_CASE and line == XML_MESSAGE and previous in (XML_EXCEPTION, XML_ERROR) + if line.startswith(("Error: ", "Warning: ")) or xml_message: + diagnostics.append(line) + diagnostic_positions.append(len(lines)) + elif line.strip() and not line.startswith("Info: "): + unexpected.append(line) + lines.append(line) + previous = line + markers = [line for line in lines if line in LIFECYCLE] + observed_versions = [line for line in lines if line.startswith(VERSION_PREFIXES)] + observed = { + "diagnostics": diagnostics, + "unexpectedLogLines": unexpected, + "validationMarkers": [line.removeprefix("Info: ") for line in markers], + "versionMessages": [line.removeprefix("Info: ") for line in observed_versions], + } + + def result(state, status, reason): + return { + "observed": {"state": state, **observed}, + "assessment": {"status": status, "reason": reason}, + } + + def tool_failure(kind, reason): + observed["failureKind"] = kind + return result("TOOL_FAILURE", "TOOL_FAILURE", reason) + + exit_code = process["exitCode"] + if process.get("timedOut") or process.get("stopReason"): + stop_reason = process.get("stopReason") or "timeout" + return tool_failure(stop_reason.upper(), f"Validator stopped: {stop_reason}") + if exit_code not in (0, 1): + return tool_failure("UNEXPECTED_EXIT", f"Unexpected validator exit {exit_code}") + expected_versions = [f"Info: {tool}-{versions[tool]}" for tool in VERSION_TOOLS] + if Counter(observed_versions) != Counter(expected_versions): + return tool_failure("VERSION_MISMATCH", "Validator version messages differ from the locked versions") + + xml_rejected = case_id == XML_CASE and diagnostics == XML_REJECTION + if any(FATAL_LOG.search(line) for line in lines): + return tool_failure("FATAL_ERROR", "Validator reported a fatal JVM or storage error") + if any(RUNTIME_FAILURE.search(line) and not (xml_rejected and line == XML_EXCEPTION) for line in lines): + return tool_failure("RUNTIME_EXCEPTION", "Validator reported a runtime exception") + if unexpected: + return tool_failure("UNEXPECTED_OUTPUT", "Validator emitted unrecognised output") + + missing_models = {name for line in diagnostics if (match := MODEL_NOT_FOUND.fullmatch(line)) + for name in match[1].split(", ")} + wrong_header_model = case_id == "RHE.T05a" and "AModel" in missing_models + if wrong_header_model: + missing_models.discard("AModel") # The incorrect header declaration is the test input. + if missing_models: + if exit_code != 1: + return tool_failure("INCOMPLETE_VALIDATION", "Validator reported missing models on its acceptance path") + return result("BLOCKED_INPUT", "BLOCKED_INPUT", + "Unresolved local models: " + ", ".join(sorted(missing_models))) + + expected = case["expectedAcceptance"] + conflict = case.get("oracleStatus") == "CONFLICT" + terminal = DONE if exit_code == 0 else FAILED + expected_markers = [FIRST_PASS, terminal] if exit_code == 1 and xml_rejected else [ + FIRST_PASS, SECOND_PASS, terminal, + ] + if markers != expected_markers: + if wrong_header_model: + return tool_failure("MODEL_DISCOVERY", "Declared header model AModel could not be resolved before validation") + if "Error: no models given to look for" in diagnostics: + return tool_failure("MODEL_DISCOVERY", "Model discovery ended before a validation result") + return tool_failure("INCOMPLETE_VALIDATION", "Validator phase and terminal messages do not match its exit") + first_pass = lines.index(FIRST_PASS) + completion = lines.index(terminal) + if not all(first_pass < position < completion for position in diagnostic_positions): + return tool_failure("INCOMPLETE_VALIDATION", "Validator diagnostics occurred outside the validation passes") + + if exit_code == 0: + if diagnostics: + return tool_failure("UNEXPECTED_OUTPUT", "Validator reported diagnostics on its acceptance path") + if conflict: + return result("ACCEPTED", "CONFLICT", "JUnit and suite documentation disagree") + if expected is True: + return result("ACCEPTED", "PASS", "Validator accepted the original as expected by JUnit") + if expected is False: + return result("ACCEPTED", "FAIL", "Validator accepted an original JUnit expects to reject") + return result("ACCEPTED", "UNSUPPORTED", "No known JUnit expectation") + + if not any(line.startswith("Error: ") for line in diagnostics): + return tool_failure("INCOMPLETE_VALIDATION", "Validator did not report a rejection diagnostic") + if conflict: + return result("REJECTED", "CONFLICT", "JUnit and suite documentation disagree") + if expected is True: + return result("REJECTED", "FAIL", "Validator rejected an original JUnit expects to accept") + if expected is not False: + return result("REJECTED", "UNSUPPORTED", "No known JUnit expectation") + if case_id not in REJECTIONS and case_id != XML_CASE: + return result("REJECTED", "UNSUPPORTED", "No verified diagnostic oracle for this original") + if xml_rejected or (case_id in REJECTIONS and Counter(diagnostics) == Counter(REJECTIONS[case_id])): + return result("REJECTED", "PASS", "Validator reported the expected case-specific rejection") + return result("REJECTED", "FAIL", "Validator diagnostics differ from the case-specific rejection") diff --git a/tools/iox-reference-harness/suite_run.py b/tools/iox-reference-harness/suite_run.py new file mode 100644 index 00000000..98336c8c --- /dev/null +++ b/tools/iox-reference-harness/suite_run.py @@ -0,0 +1,180 @@ +#!/usr/bin/env python3 +"""Run selected original suite-interlis cases against the pinned legacy validator.""" + +import argparse +import json +from pathlib import Path +import platform +import re +import shutil +import subprocess +import sys +import tempfile + +import run +from suite_inventory import CATALOG_FILE, load_catalog, verify_checkout, verify_input +from suite_result import classify + + +MAX_CASES = 12 +LIMITS = {"timeoutSeconds": run.CASE_TIMEOUT_SECONDS, "tempLimitBytes": 64 * 1024**2} + + +def external_output(path, checkout): + output = (path or Path(tempfile.gettempdir())).resolve() + for root in (run.HARNESS.parents[1], checkout.resolve()): + if output.is_relative_to(root): + raise ValueError(f"Output must be outside {root}") + if path is None: + return Path(tempfile.mkdtemp(prefix="suite-interlis-", dir=output)) + output.mkdir(mode=0o700) + return output + + +def finish_case(result, status, reason): + result["status"] = status + result["assessment"] = {"status": status, "reason": reason} + return result + + +def run_case(case, catalog, checkout, output, java, entrypoint, versions): + case_id = case["id"] + models = catalog["modelSets"][case["modelSet"]] + inputs = {case["xtf"]: case["sha256"], **{path: catalog["models"][path] for path in models}} + observed = {"state": "NOT_RUN", "argv": None, "cwd": None, "process": None, "logSha256": {}} + result = { + "id": case_id, + "expectation": {key: case[key] for key in ("expectedAcceptance", "oracleStatus", "java", "documentation")}, + "norm": case["norm"], "ruleGroup": case["ruleGroup"], "phases": case["phases"], + "expectedInputSha256": inputs, "inputSha256": {}, "stagedInputs": {}, "observed": observed, + } + for key in ("notes", "vendorSkips"): + if key in case: + result["expectation"][key] = case[key] + + work = output / case_id + temp = work / "temp" + home = temp / "home" + plugins = temp / "plugins" + home.mkdir(parents=True) + plugins.mkdir() + try: + for path, digest in inputs.items(): + source = verify_input(checkout, path, digest) + target = temp / path + target.parent.mkdir(parents=True, exist_ok=True) + shutil.copyfile(source, target) + verify_input(temp, path, digest) + result["inputSha256"][path] = digest + result["stagedInputs"][path] = str(target.relative_to(output)) + except (ValueError, OSError) as failure: + return finish_case(result, "BLOCKED_INPUT", str(failure)) + + options = [*run.JVM_OPTIONS, f"-Duser.home={home}", f"-Djava.io.tmpdir={temp}"] + # A relative --modeldir value keeps path-list separators out of the resolver input. + argv = [java, *options, "-jar", str(entrypoint), "--plugins", plugins.name, + "--modeldir", "data/models", case["xtf"]] + observed.update(argv=argv, cwd=str(temp)) + launch_failure = None + try: + observed["process"] = run.run_probe(argv, work, temp, LIMITS) + except OSError as failure: + launch_failure = failure + for name in ("stdout.log", "stderr.log"): + log = work / name + if log.is_file(): + observed["logSha256"][str(log.relative_to(output))] = run.sha256(log) + if launch_failure is not None: + observed["state"] = "TOOL_FAILURE" + observed["failureKind"] = "LAUNCH" + return finish_case(result, "TOOL_FAILURE", str(launch_failure)) + + stdout = (work / "stdout.log").read_text(encoding="utf-8", errors="replace") + stderr = (work / "stderr.log").read_text(encoding="utf-8", errors="replace") + outcome = classify(case, observed["process"], stdout, stderr, versions) + observed.update(outcome["observed"]) + result["assessment"] = outcome["assessment"] + result["status"] = outcome["assessment"]["status"] + return result + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--checkout", required=True, type=Path, help="external suite-interlis Git checkout") + parser.add_argument("--archive", required=True, type=Path, help="local locked ilivalidator release ZIP") + parser.add_argument("--case", required=True, action="append", help="original case ID (repeatable)") + parser.add_argument("--output", type=Path, help="new external directory (default: fresh temporary directory)") + args = parser.parse_args() + if len(args.case) > MAX_CASES or len(set(args.case)) != len(args.case): + parser.error(f"select at most {MAX_CASES} unique case IDs") + try: + catalog = load_catalog() + except (ValueError, OSError) as failure: + parser.error(str(failure)) + cases = {case["id"]: case for case in catalog["cases"]} + unknown = set(args.case) - cases.keys() + if unknown: + parser.error(f"unknown case IDs: {', '.join(sorted(unknown))}") + try: + output = external_output(args.output, args.checkout) + except FileExistsError: + parser.error(f"--output must name a new directory: {args.output}") + except (ValueError, OSError) as failure: + parser.error(f"cannot create output directory: {failure}") + + print(f"Evidence: {output}", flush=True) + report = { + "schema": 1, "status": "FAIL", "upstream": catalog["upstream"], + "checkout": str(args.checkout.resolve()), "python": platform.python_version(), "platform": platform.platform(), + "invocation": [sys.executable, str(Path(__file__).resolve()), *sys.argv[1:]], + "selectedCases": args.case, "budgets": {**LIMITS, "maxCases": MAX_CASES}, + "setup": [], "cases": [], "logSha256Scope": "raw-output-of-this-run", + } + stage = "checkout" + try: + checkout = verify_checkout(args.checkout, catalog["upstream"]["commit"]) + report["verifiedCheckoutCommit"] = catalog["upstream"]["commit"] + stage = "archive" + lock = run.read_json(run.LOCK_FILE) + report["versions"] = lock["versions"] + report["sourceSha256"] = {path.name: run.sha256(path) for path in ( + CATALOG_FILE, run.LOCK_FILE, Path(__file__), run.HARNESS / "run.py", + run.HARNESS / "suite_inventory.py", run.HARNESS / "suite_result.py", + )} + setup_temp = output / "setup-temp" + setup_temp.mkdir() + env = run.ENV | {key: str(setup_temp) for key in ("TMPDIR", "TMP", "TEMP")} + entrypoint = run.legacy_jars(lock, str(args.archive.resolve()), output, report, env) + stage = "java" + java_path = shutil.which("java") + if java_path is None: + raise ValueError("Java 25 is required on PATH") + java = str(Path(java_path).resolve()) + version = run.setup_process([java, "-version"], output, report, env) + if not re.search(r'version "25(?=[."+-])', version): + raise ValueError("Java 25 is required on PATH") + stage = "case" + for case_id in args.case: + result = run_case(cases[case_id], catalog, checkout, output, java, entrypoint, lock["versions"]) + report["cases"].append(result) + process = result["observed"]["process"] or {} + print(f"{result['status']} {case_id} (exit {process.get('exitCode', 'not started')})", flush=True) + if process.get("stopReason") == "interrupted": + break + if len(report["cases"]) == len(args.case) and all(case["status"] == "PASS" for case in report["cases"]): + report["status"] = "PASS" + except (ValueError, OSError, subprocess.TimeoutExpired) as failure: + report["status"] = "BLOCKED_INPUT" if stage in ("checkout", "archive") else "TOOL_FAILURE" + report["error"] = {"stage": stage, "message": str(failure)} + print(f"{report['status']} {stage}: {failure}", file=sys.stderr) + finally: + completed = {case["id"] for case in report["cases"]} + report["notRun"] = {"status": "NOT_RUN", + "unselectedCases": sorted(cases.keys() - set(args.case)), + "selectedCases": [case_id for case_id in args.case if case_id not in completed]} + (output / "report.json").write_text(json.dumps(report, indent=2, ensure_ascii=False) + "\n", encoding="utf-8") + return 0 if report["status"] == "PASS" else 1 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/tools/iox-reference-harness/test_suite_result.py b/tools/iox-reference-harness/test_suite_result.py new file mode 100644 index 00000000..5fd23691 --- /dev/null +++ b/tools/iox-reference-harness/test_suite_result.py @@ -0,0 +1,143 @@ +"""Regression checks for classifying pinned validator logs.""" + +import unittest + +from run import LOCK_FILE, read_json +from suite_inventory import load_catalog +from suite_result import classify + + +TEXT_LENGTH_DIAGNOSTIC = ( + "Error: line 12: TestSuite.Bodenbedeckung.GebaeudeArt: tid ga4: " + "Attribute Art3 is length restricted to 3" +) +XML_END_TAG_MESSAGE = 'Message: The end-tag for element type "TRANSFER" must end with a \'>\' delimiter.' +XML_REJECTION = [ + "Info: validate data...", + "Info: first validation pass...", + "Error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[31,11]", + XML_END_TAG_MESSAGE, + "Error: ParseError at [row,col]:[31,11]", + XML_END_TAG_MESSAGE, + "Info: ...validation failed", +] + + +class ValidatorResultClassificationTest(unittest.TestCase): + @classmethod + def setUpClass(cls): + cls.cases = {case["id"]: case for case in load_catalog()["cases"]} + cls.versions = read_json(LOCK_FILE)["versions"] + cls.version_lines = [ + f"Info: {tool}-{cls.versions[tool]}" + for tool in ("ilivalidator", "ili2c", "iox-ili") + ] + + def assess(self, case_id, exit_code, lines, stop_reason=None): + process = { + "exitCode": exit_code, + "stopReason": stop_reason, + "timedOut": stop_reason == "timeout", + } + stderr = "\n".join(self.version_lines + list(lines)) + "\n" + return classify(self.cases[case_id], process, "", stderr, self.versions) + + def assert_outcome(self, result, state, status): + self.assertEqual(result["observed"]["state"], state, result) + self.assertEqual(result["assessment"]["status"], status, result) + + def validation_log(self, terminal, *diagnostics): + return [ + "Info: validate data...", + "Info: first validation pass...", + *diagnostics, + "Info: second validation pass...", + f"Info: ...validation {terminal}", + ] + + def test_completed_validation_accepts_positive_case(self): + result = self.assess("RAt.T02a", 0, self.validation_log("done")) + self.assert_outcome(result, "ACCEPTED", "PASS") + + def test_observed_acceptance_does_not_resolve_an_oracle_conflict(self): + case = self.cases["RAt.T02a"] | {"oracleStatus": "CONFLICT"} + stderr = "\n".join(self.version_lines + self.validation_log("done")) + "\n" + result = classify(case, {"exitCode": 0}, "", stderr, self.versions) + self.assert_outcome(result, "ACCEPTED", "CONFLICT") + + def test_expected_rejection_requires_matching_diagnostic(self): + lines = self.validation_log("failed", TEXT_LENGTH_DIAGNOSTIC) + result = self.assess("RAt.T02b", 1, lines) + self.assert_outcome(result, "REJECTED", "PASS") + + def test_unrelated_rejection_fails_suite_expectation(self): + lines = self.validation_log( + "failed", + "Error: line 12: TestSuite.Bodenbedeckung.GebaeudeArt: tid ga4: " + "Attribute Art3 is missing", + ) + result = self.assess("RAt.T02b", 1, lines) + self.assert_outcome(result, "REJECTED", "FAIL") + + def test_uncurated_negative_case_has_no_verified_assessment(self): + lines = self.validation_log( + "failed", + "Error: line 12: TestSuite.Bodenbedeckung.GebaeudeArt: tid ga4: " + "Attribute Beschreibung is length restricted to 9", + ) + result = self.assess("RAt.T03a", 1, lines) + self.assert_outcome(result, "REJECTED", "UNSUPPORTED") + + def test_matching_diagnostic_cannot_mask_jvm_crash(self): + lines = self.validation_log( + "failed", + TEXT_LENGTH_DIAGNOSTIC, + 'Exception in thread "main" java.lang.NullPointerException', + ) + result = self.assess("RAt.T02b", 1, lines) + self.assert_outcome(result, "TOOL_FAILURE", "TOOL_FAILURE") + self.assertEqual(result["observed"]["failureKind"], "RUNTIME_EXCEPTION") + + def test_controlled_xml_rejection_stops_after_first_pass(self): + result = self.assess("RXW.T01b", 1, XML_REJECTION) + self.assert_outcome(result, "REJECTED", "PASS") + + def test_xml_rejection_with_stack_trace_is_a_tool_failure(self): + lines = [*XML_REJECTION, "\tat org.interlis2.validator.Validator.runValidation(Validator.java:100)"] + result = self.assess("RXW.T01b", 1, lines) + self.assert_outcome(result, "TOOL_FAILURE", "TOOL_FAILURE") + + def test_timeout_cannot_pass_even_with_success_markers(self): + result = self.assess("RAt.T02a", -9, self.validation_log("done"), "timeout") + self.assert_outcome(result, "TOOL_FAILURE", "TOOL_FAILURE") + self.assertEqual(result["observed"]["failureKind"], "TIMEOUT") + + def test_acceptance_requires_both_passes_and_completion(self): + for missing in ( + "Info: first validation pass...", + "Info: second validation pass...", + "Info: ...validation done", + ): + with self.subTest(missing=missing): + lines = self.validation_log("done") + lines.remove(missing) + result = self.assess("RAt.T02a", 0, lines) + self.assert_outcome(result, "TOOL_FAILURE", "TOOL_FAILURE") + + def test_missing_local_model_blocks_validation(self): + for case_id, missing_models in ( + ("RAt.T02b", "TestSuite2"), + ("RHE.T05a", "TestSuite2, AModel"), + ): + with self.subTest(case_id=case_id): + result = self.assess(case_id, 1, [f"Error: {missing_models}: model(s) not found"]) + self.assert_outcome(result, "BLOCKED_INPUT", "BLOCKED_INPUT") + + def test_deliberate_unknown_header_model_is_not_a_missing_dependency(self): + result = self.assess("RHE.T05a", 1, ["Error: AModel: model(s) not found"]) + self.assert_outcome(result, "TOOL_FAILURE", "TOOL_FAILURE") + self.assertEqual(result["observed"]["failureKind"], "MODEL_DISCOVERY") + + +if __name__ == "__main__": + unittest.main() From 9d7629f48d18f2866c54df258ee6d0606d759561 Mon Sep 17 00:00:00 2001 From: Stefan Ziegler Date: Fri, 6 Nov 2026 22:04:01 +0100 Subject: [PATCH 4/4] Finalize suite-interlis integration and OID provenance --- testdata/reference/suite-interlis/cases.json | 12 ++++++------ tools/iox-reference-harness/README.md | 5 +++-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/testdata/reference/suite-interlis/cases.json b/testdata/reference/suite-interlis/cases.json index 64a6dc47..3402116d 100644 --- a/testdata/reference/suite-interlis/cases.json +++ b/testdata/reference/suite-interlis/cases.json @@ -427,12 +427,12 @@ "modelSet": "suite2", "ruleGroup": "object-identity", "phases": ["P4.4"], - "norm": {"sections": ["2.8.9", "3.3.1", "3.3.6", "3.3.7"]}, + "norm": {"sections": ["2.5.2", "2.8.9", "3.3.1", "3.3.6", "3.3.7"]}, "expectedAcceptance": false, "oracleStatus": "AGREES", "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T11a", "line": 636}, "documentation": {"path": "doc/attributes.md", "line": 108, "expectedAcceptance": false}, - "notes": ["TestSuite2 uses OID declarations without CONTRACTED. Compiler decision 01 covers that model declaration."] + "notes": ["The contracted TestSuite2 model declares UUIDOID for basket and object identifiers (data/models/TestSuite2.ili:3,10–12)."] }, { "id": "RAt.T11b", @@ -441,12 +441,12 @@ "modelSet": "suite2", "ruleGroup": "object-identity", "phases": ["P4.4"], - "norm": {"sections": ["2.8.9", "3.3.1", "3.3.6", "3.3.7"]}, + "norm": {"sections": ["2.5.2", "2.8.9", "3.3.1", "3.3.6", "3.3.7"]}, "expectedAcceptance": false, "oracleStatus": "AGREES", "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T11b", "line": 657}, "documentation": {"path": "doc/attributes.md", "line": 108, "expectedAcceptance": false}, - "notes": ["TestSuite2 uses OID declarations without CONTRACTED. Compiler decision 01 covers that model declaration."] + "notes": ["The contracted TestSuite2 model declares UUIDOID for basket and object identifiers (data/models/TestSuite2.ili:3,10–12)."] }, { "id": "RAt.T11c", @@ -481,7 +481,7 @@ "modelSet": "suite", "ruleGroup": "object-identity", "phases": ["P4.4"], - "norm": {"sections": ["2.8.9", "3.3.1", "3.3.6", "3.3.7"]}, + "norm": {"sections": ["2.8.9", "3.3.1", "3.3.11.16"]}, "expectedAcceptance": false, "oracleStatus": "AGREES", "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T11e", "line": 720}, @@ -495,7 +495,7 @@ "modelSet": "suite", "ruleGroup": "object-identity", "phases": ["P4.4"], - "norm": {"sections": ["2.8.9", "3.3.1", "3.3.6", "3.3.7"]}, + "norm": {"sections": ["2.8.9", "3.3.1", "3.3.11.16"]}, "expectedAcceptance": false, "oracleStatus": "AGREES", "java": {"path": "routine/src/test/java/ch/interlis/testsuite/AttributeTest.java", "method": "RAt_T11f", "line": 742}, diff --git a/tools/iox-reference-harness/README.md b/tools/iox-reference-harness/README.md index 96a4a6dc..85a6b97d 100644 --- a/tools/iox-reference-harness/README.md +++ b/tools/iox-reference-harness/README.md @@ -111,8 +111,9 @@ python3 -B tools/iox-reference-harness/test_suite_result.py Der Runner verlangt das lokale ZIP aus [dem bestehenden Lock](legacy-lock.json). Er prüft den Git-Pin und die Eingabehashes der ausgewählten Fälle. Pro Fall startet er ilivalidator 1.15.0 mit `-Xmx2g`, einem isolierten Arbeitsverzeichnis -und ausschliesslich den geprüften lokalen Modellen. Das neue Ausgabeverzeichnis -enthält `report.json` und die gehashten Rohstreams je ausgeführtem Fall. +und ausschliesslich den geprüften lokalen Modellen. `--output` bezeichnet ein +neues Verzeichnis ausserhalb des Produktrepositorys und des Suite-Checkouts. +Dort stehen `report.json` und die gehashten Rohstreams je ausgeführtem Fall. Ohne `--output` wird ein temporäres Verzeichnis angelegt. Pro Aufruf sind bis zu zwölf IDs und pro Prozess bis zu 30 Sekunden vorgesehen.