This is an automated email from the ASF dual-hosted git repository.

tiagobento pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-kie-tools.git


The following commit(s) were added to refs/heads/main by this push:
     new 20f512b2660 kie-issues#1043: Use shared DMN models for testing purpose 
(#2207)
20f512b2660 is described below

commit 20f512b2660a92a200679d9ddcc9ebe292f9b90f
Author: Gabriele Cardosi <[email protected]>
AuthorDate: Tue Apr 23 01:22:38 2024 +0200

    kie-issues#1043: Use shared DMN models for testing purpose (#2207)
    
    Co-authored-by: Gabriele-Cardosi <[email protected]>
    Co-authored-by: Yeser Amer <[email protected]>
    Co-authored-by: Jozef Marko <[email protected]>
---
 .../LICENSE                                        | 201 ++++++++++++++++
 .../README.md                                      |  36 +++
 .../env/index.js                                   |  27 +++
 .../package.json                                   |  36 +++
 ...MarshallerBackendCompatibilityTesterScript.java |  49 ++++
 .../src/DmnSemanticComparison.java                 | 259 +++++++++++++++++++++
 .../src/DmnValidation.java                         | 135 +++++++++++
 .../src/dependenciesFetch.ts                       |  28 +++
 .../src/index.ts                                   |  89 +++++++
 .../tsconfig.json                                  |   7 +
 packages/dmn-marshaller/package.json               |   6 +-
 .../other/decisionAndInputWithAddition.dmn         |  54 +++++
 .../tests/dmnSemanticComparison.test.ts            | 159 +++++++++++++
 .../dmn-marshaller/tests/dmnValidation.test.ts     | 150 ++++++++++++
 packages/dmn-marshaller/tests/idempotency.test.ts  |  44 +++-
 packages/dmn-testing-models/LICENSE                | 201 ++++++++++++++++
 packages/dmn-testing-models/README.md              |  20 ++
 packages/dmn-testing-models/env/index.js           |  31 +++
 packages/dmn-testing-models/index.js               |  20 ++
 packages/dmn-testing-models/install.js             |  27 +++
 packages/dmn-testing-models/package.json           |  40 ++++
 packages/dmn-testing-models/pom.xml                | 145 ++++++++++++
 pnpm-lock.yaml                                     |  90 ++++++-
 repo/graph.dot                                     |  11 +-
 repo/graph.json                                    |  29 ++-
 25 files changed, 1865 insertions(+), 29 deletions(-)

diff --git a/packages/dmn-marshaller-backend-compatibility-tester/LICENSE 
b/packages/dmn-marshaller-backend-compatibility-tester/LICENSE
new file mode 100644
index 00000000000..261eeb9e9f8
--- /dev/null
+++ b/packages/dmn-marshaller-backend-compatibility-tester/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/packages/dmn-marshaller-backend-compatibility-tester/README.md 
b/packages/dmn-marshaller-backend-compatibility-tester/README.md
new file mode 100644
index 00000000000..db0cf33b452
--- /dev/null
+++ b/packages/dmn-marshaller-backend-compatibility-tester/README.md
@@ -0,0 +1,36 @@
+### DMN Marshaller backend compatibility tester
+
+The scope of this module is to provide a reliable scripting mechanism that 
tests DMN Files generated by the `dmn-marshaller` package against the backend 
counterpart code that lives in the drools repository.
+The scripts are based on [JBang!](https://www.jbang.dev/) which provides an 
out-of-the-box library to be consumed in NodeJs.
+
+At the moment of writing, two scripts are available:
+
+- DMN Validation, which can validate a DMN file (and its imported DMN assets) 
using the [KIE DMN 
Validator](https://github.com/apache/incubator-kie-drools/tree/main/kie-dmn/kie-dmn-validation)
 back-end module.
+- DMN Semantic Comparison, which compares two DMN files (and their imported 
DMN assets) using a Backend logic that relies on KIE DMN Engine core code.
+
+Every script is defined in a single Java class. Inside those, you can find a 
list of fields (marked with `@Option` annotation) that represent the commands 
and their required parameters to run the scripts.
+
+An abstract class is defined as the parent class of all defined scripts. That 
class holds all the Dependencies required by all the Java class scripts that 
implement it. This is required to enable a dependency fetching mechanism useful 
for:
+
+- Avoid issues when launching several JBang instances. This case may lead to 
issues with internal JBang caching.
+- In CI/CD, it's sometimes required to download all the required dependencies 
in an earlier phase and then build the project.
+  To run the dependency fetching mechanism, you can just launch the jbang 
command passing that Abstract class location (no args).
+  To keep this mechanism consistent, please always declare all the required 
dependencies in the abstract superclass.
+  The dependency fetching mechanism can be called externally from a 
`package.json` script using the `dependenciesFetch.js` file, using the 
following command:
+  `node dist/dependenciesFetch.js`.
+  It's not possible to directly call JBang in the package.json script because 
when the JBang NPM library installs JBang in the local machine with the 
preinstall hook, it requires a new Shell for changes to take effect.
+
+### Usage
+
+The entry point of this module is the `index.js` file that exports:
+
+- `executeJBangScript` that requires as parameters: the Script to execute (see 
below) and its required args.
+- The enumeration of the currently available Script
+  That represents all the required elements for consuming this module 
externally.
+
+To execute a specific JBang script present in this module you must:
+
+- Import the `"@kie-tools/dmn-marshaller-backend-compatibility-tester"` 
dependency;
+- Import the required function (eg.`executeDMNValidation` or 
`executeDMNSemanticComparison`) in your JS/TS file;
+- Call one of the above function passing its required parameters.
+- For the precise args list, please check inside the Java Class Script of your 
interest and take note of all `@Option` annotated fields.
diff --git a/packages/dmn-marshaller-backend-compatibility-tester/env/index.js 
b/packages/dmn-marshaller-backend-compatibility-tester/env/index.js
new file mode 100644
index 00000000000..61bc742bd66
--- /dev/null
+++ b/packages/dmn-marshaller-backend-compatibility-tester/env/index.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+const { varsWithName, composeEnv } = require("@kie-tools-scripts/build-env");
+
+module.exports = composeEnv([require("@kie-tools/root-env/env")], {
+  vars: varsWithName({}),
+  get env() {
+    return {};
+  },
+});
diff --git a/packages/dmn-marshaller-backend-compatibility-tester/package.json 
b/packages/dmn-marshaller-backend-compatibility-tester/package.json
new file mode 100644
index 00000000000..d0be4aa069a
--- /dev/null
+++ b/packages/dmn-marshaller-backend-compatibility-tester/package.json
@@ -0,0 +1,36 @@
+{
+  "private": true,
+  "name": "@kie-tools/dmn-marshaller-backend-compatibility-tester",
+  "version": "0.0.0",
+  "description": "",
+  "license": "Apache-2.0",
+  "keywords": [],
+  "homepage": "https://github.com/apache/incubator-kie-tools";,
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/apache/incubator-kie-tools.git";
+  },
+  "bugs": {
+    "url": "https://github.com/apache/incubator-kie-tools/issues";
+  },
+  "types": "./dist/index.d.ts",
+  "main": "dist/index.js",
+  "files": [
+    "dist",
+    "src"
+  ],
+  "scripts": {
+    "build:dev": "rimraf dist && tsc -p tsconfig.json && pnpm prefetch",
+    "build:prod": "pnpm build:dev",
+    "prefetch": "node dist/dependenciesFetch.js"
+  },
+  "dependencies": {
+    "@jbangdev/jbang": "0.2.0"
+  },
+  "devDependencies": {
+    "@kie-tools/root-env": "workspace:*",
+    "@kie-tools/tsconfig": "workspace:*",
+    "rimraf": "^3.0.2",
+    "typescript": "^4.6.2"
+  }
+}
\ No newline at end of file
diff --git 
a/packages/dmn-marshaller-backend-compatibility-tester/src/DmnMarshallerBackendCompatibilityTesterScript.java
 
b/packages/dmn-marshaller-backend-compatibility-tester/src/DmnMarshallerBackendCompatibilityTesterScript.java
new file mode 100644
index 00000000000..8737b59b025
--- /dev/null
+++ 
b/packages/dmn-marshaller-backend-compatibility-tester/src/DmnMarshallerBackendCompatibilityTesterScript.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+///usr/bin/env jbang "$0" "$@" ; exit $?
+//JAVA 17
+//REPOS 
mavencentral,apache=https://repository.apache.org/content/groups/public/
+//DEPS ch.qos.logback:logback-classic:1.2.13
+//DEPS info.picocli:picocli:4.7.5
+//DEPS org.slf4j:slf4j-simple:2.0.12
+//DEPS org.kie:kie-api:${kogito-runtime.version}
+//DEPS org.kie:kie-internal:${kogito-runtime.version}
+//DEPS org.kie:kie-dmn-api:${kogito-runtime.version}
+//DEPS org.kie:kie-dmn-core:${kogito-runtime.version}
+//DEPS org.kie:kie-dmn-model:${kogito-runtime.version}
+//DEPS org.kie:kie-dmn-validation:${kogito-runtime.version}
+
+package jbang;
+
+import java.util.concurrent.Callable;
+
+/* Parent Script class for all JBang script used in this package
+ * This class serves to pre-fetch all dependencies declared in this class (in 
the above DEPS scripts).
+ * To pre-fetch the dependency, just call this jbang script with no args and 
the required dependency's versions 
+ * (eg. jbang -Dkogito-runtime.version=x.y.z 
./src/DmnMarshallerBackendCompatibilityTesterScript.java)
+ * To make it work, all dependencies used by all JBang scripts (aka this class 
implementations), MUST be declared here.
+ */
+abstract class DmnMarshallerBackendCompatibilityTesterScript implements 
Callable<Integer> {
+
+    public static void main(String... args) {
+        System.exit(0);
+    }
+
+}
diff --git 
a/packages/dmn-marshaller-backend-compatibility-tester/src/DmnSemanticComparison.java
 
b/packages/dmn-marshaller-backend-compatibility-tester/src/DmnSemanticComparison.java
new file mode 100644
index 00000000000..aabd01184d5
--- /dev/null
+++ 
b/packages/dmn-marshaller-backend-compatibility-tester/src/DmnSemanticComparison.java
@@ -0,0 +1,259 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+///usr/bin/env jbang "$0" "$@" ; exit $?
+//SOURCES ./DmnMarshallerBackendCompatibilityTesterScript.java
+/* Please do not declare new dependencies here, but in the above Parent class 
to preserve 
+ *  the dependencies fetching mechanism */
+
+package jbang;
+
+import java.io.File;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import picocli.CommandLine;
+import picocli.CommandLine.Command;
+import picocli.CommandLine.Option;
+
+import org.kie.api.io.Resource;
+import org.kie.dmn.api.core.DMNContext;
+import org.kie.dmn.api.core.DMNModel;
+import org.kie.dmn.api.core.DMNRuntime;
+import org.kie.dmn.model.api.Definitions;
+import org.kie.dmn.model.api.NamedElement;
+import org.kie.dmn.core.internal.utils.DMNRuntimeBuilder;
+import org.kie.internal.io.ResourceFactory;
+
+/**
+ * JBang script that performs DMN files' XML (in string format) validation
+ * relying on KIE DMN Validator
+ * 
(https://github.com/apache/incubator-kie-drools/tree/main/kie-dmn/kie-dmn-validation).
+ * The script can manage one or two (in case of imported model) DMN file paths.
+ * The XSD SCHEMA, DMN COMPLIANCE and DMN COMPILATION are validated.
+ */
+class DmnSemanticComparison extends 
DmnMarshallerBackendCompatibilityTesterScript {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(DmnSemanticComparison.class);
+
+    @Option(names = {"-c", "--command"}, description = "Command to execute 
(no_imports) or (with_imports)", required = true)
+    private String command;
+
+    @Option(names = {"-o", "--originalDmnFilePath"}, description = "Path of 
original DMN file to be compared", required = true)
+    private String originalDmnPath;
+
+    @Option(names = {"-g", "--generatedDmnFilePath"}, description = "Path of 
generated DMN file to be compared", required = true)
+    private String generatedDmnPath;
+
+    @Option(names = {"-i", "--importedOriginalDmnFilesPaths"}, description = 
"Paths of the DMN files imported by the DMN file to validate", required = 
false, split = ",")
+    private String[] importedOriginalDmnPaths;
+
+    @Option(names = {"-j", "--importedGeneratedDmnFilesPaths"}, description = 
"Paths of the DMN files imported by the DMN file to validate", required = 
false, split = ",")
+    private String[] importedGeneratedDmnPaths;
+
+    public static void main(String... args) {
+        int exitCode = new CommandLine(new 
DmnSemanticComparison()).execute(args);
+        System.exit(exitCode);
+    }
+
+    @Override
+    public Integer call() {
+        try {
+            switch (command) {
+                case "no_imports":
+                    return compareDMNModelsNoImports();
+                case "with_imports": {
+                    if (importedOriginalDmnPaths == null || 
importedOriginalDmnPaths.length == 0
+                            || importedGeneratedDmnPaths == null ||
+                            importedGeneratedDmnPaths.length == 0
+                            || importedOriginalDmnPaths.length != 
importedGeneratedDmnPaths.length) {
+                        throw new IllegalArgumentException("Imported DMN paths 
are missing or wrong");
+                    }
+                    return compareDMNModelsWithImports();
+                }
+                default:
+                    LOGGER.error("Unknown command {}", command);
+                    return 1;
+            }
+        } catch (Exception e) {
+            LOGGER.error("Failed to execute {}", command, e);
+            return 100;
+        }
+    }
+
+    private int compareDMNModelsNoImports() throws Exception {
+        DMNModel originalModel = instantiateDMNRuntimeAndReturnDMNModel(new 
File(originalDmnPath));
+        DMNModel generatedModel = instantiateDMNRuntimeAndReturnDMNModel(new 
File(generatedDmnPath));
+
+        LOGGER.info("========== SEMANTIC COMPARISON ==========");
+        LOGGER.info("Evaluating DMN file: " + originalModel.getName());
+
+        return compareDMNModels(originalModel, generatedModel);
+    }
+
+    private int compareDMNModelsWithImports() throws Exception {
+        List<File> importedOriginalDmnFiles = 
Stream.of(importedOriginalDmnPaths)
+                .map(File::new)
+                .collect(Collectors.toList());
+        List<File> importedGeneratedDmnFiles = 
Stream.of(importedGeneratedDmnPaths)
+                .map(File::new)
+                .collect(Collectors.toList());
+
+        DMNModel originalModel = instantiateDMNRuntimeAndReturnDMNModel(new 
File(originalDmnPath),
+                importedOriginalDmnFiles);
+        DMNModel generatedModel = instantiateDMNRuntimeAndReturnDMNModel(new 
File(generatedDmnPath),
+                importedGeneratedDmnFiles);
+
+        LOGGER.info("========== SEMANTIC COMPARISON ==========");
+        LOGGER.info("Evaluating DMN file: " + originalModel.getName());
+
+        return compareDMNModels(originalModel, generatedModel);
+    }
+
+    private DMNModel instantiateDMNRuntimeAndReturnDMNModel(File dmnFile) 
throws Exception {
+        Resource modelResource = ResourceFactory.newReaderResource(new 
FileReader(dmnFile), "UTF-8");
+        DMNRuntime dmnRuntime = DMNRuntimeBuilder.fromDefaults()
+                .buildConfiguration()
+                .fromResources(Collections.singletonList(modelResource))
+                .getOrElseThrow(RuntimeException::new);
+        return dmnRuntime.getModels().get(0);
+    }
+
+    private DMNModel instantiateDMNRuntimeAndReturnDMNModel(File 
importerDmnFile, List<File> importedDmnFiles)
+            throws Exception {
+        List<Resource> resources = new ArrayList<>();
+        String importerFileSourcePath = importerDmnFile.getCanonicalPath();
+        List<File> allDMNFiles = new ArrayList(importedDmnFiles);
+        allDMNFiles.add(importerDmnFile);
+
+        for (File file : allDMNFiles) {
+            Resource readerResource = ResourceFactory.newReaderResource(new 
FileReader(file), "UTF-8");
+            readerResource.setSourcePath(file.getCanonicalPath());
+            resources.add(readerResource);
+        }
+
+        DMNRuntime dmnRuntime = DMNRuntimeBuilder.fromDefaults()
+                .buildConfiguration()
+                .fromResources(resources)
+                .getOrElseThrow(RuntimeException::new);
+        DMNModel importerModel = null;
+
+        for (DMNModel m : dmnRuntime.getModels()) {
+            if 
(m.getResource().getSourcePath().equals(importerFileSourcePath.replace("\\", 
"/"))) {
+                importerModel = m;
+                break;
+            }
+        }
+
+        if (importerModel == null) {
+            throw new IllegalStateException("Was not able to identify importer 
model: " + importerFileSourcePath);
+        }
+        return importerModel;
+    }
+
+    /**
+     * This function compares two DMN models and returns a list of any missing
+     * elements between them.
+     * The function checks both the original model and the generated model to 
ensure
+     * that all elements are present in both models.
+     * If any missing elements are found, the function returns a list of error
+     * messages describing the missing elements
+     */
+    private int compareDMNModels(DMNModel originalModel, DMNModel 
generatedModel) {
+        Definitions originalModelDefinitions = originalModel.getDefinitions();
+        Definitions generatedModelDefinitions = 
generatedModel.getDefinitions();
+
+        List<String> missingElementsMessages = new ArrayList<>();
+
+        /* Check if the ORIGINAL model elements are present in the GENERATED 
model */
+        
missingElementsMessages.addAll(checkElements(originalModelDefinitions.getDecisionService(),
+                generatedModelDefinitions.getDecisionService()));
+        
missingElementsMessages.addAll(checkElements(originalModelDefinitions.getBusinessContextElement(),
+                generatedModelDefinitions.getBusinessContextElement()));
+        missingElementsMessages.addAll(
+                checkElements(originalModelDefinitions.getDrgElement(), 
generatedModelDefinitions.getDrgElement()));
+        missingElementsMessages
+                .addAll(checkElements(originalModelDefinitions.getImport(), 
generatedModelDefinitions.getImport()));
+        
missingElementsMessages.addAll(checkElements(originalModelDefinitions.getItemDefinition(),
+                generatedModelDefinitions.getItemDefinition()));
+
+        /* Check if the GENERATED model elements are present in the ORIGINAL 
model */
+        
missingElementsMessages.addAll(checkElements(generatedModelDefinitions.getDecisionService(),
+                originalModelDefinitions.getDecisionService()));
+        
missingElementsMessages.addAll(checkElements(generatedModelDefinitions.getBusinessContextElement(),
+                originalModelDefinitions.getBusinessContextElement()));
+        missingElementsMessages.addAll(
+                checkElements(generatedModelDefinitions.getDrgElement(), 
originalModelDefinitions.getDrgElement()));
+        missingElementsMessages
+                .addAll(checkElements(generatedModelDefinitions.getImport(), 
originalModelDefinitions.getImport()));
+        
missingElementsMessages.addAll(checkElements(generatedModelDefinitions.getItemDefinition(),
+                originalModelDefinitions.getItemDefinition()));
+
+        if (missingElementsMessages.isEmpty()) {
+            LOGGER.info("RESULT: Original and Generated files are semantically 
the same!");
+            return 0;
+        } else {
+            LOGGER.error("ERROR: Original and Generated files are NOT 
semantically the same!");
+            missingElementsMessages.forEach(message -> LOGGER.error(message));
+            System.err.println("ERROR: Original and Generated files are NOT 
semantically the same!");
+            System.err.println("DMN File Name: " + originalModel.getName());
+            missingElementsMessages.forEach(System.err::println);
+            return 1;
+        }
+    }
+
+    /**
+     * It's a generic method that checks if all elements in a Collection of 
type T
+     * are present in another Collection of the same type.
+     * It takes two parameters:
+     *
+     * @param target A Collection of type T that represents the target 
collection to
+     *               search for missing elements
+     * @param source A Collection of type T that represents the source 
collection
+     *               containing the elements to check.
+     * @return
+     */
+    static <T extends NamedElement> List<String> checkElements(Collection<T> 
target, Collection<T> source) {
+        return source.stream().filter(sourceElement -> checkIfAbsent(target, 
sourceElement))
+                .map(sourceElement -> "Missing element: " + 
sourceElement.getName())
+                .collect(Collectors.toList());
+    }
+
+    /**
+     * This method checks if a given element is absent in a collection of 
elements
+     * based on its name. It takes two parameters:
+     *
+     * @param target A collection of elements to search through.
+     * @param source The element to search for.
+     * @return This method returns a boolean value indicating whether or not 
the
+     *         element is absent from the collection.
+     */
+    static <T extends NamedElement> boolean checkIfAbsent(Collection<T> 
target, T source) {
+        return target.stream().noneMatch(namedElement -> 
Objects.equals(namedElement.getName(), source.getName()));
+    }
+}
diff --git 
a/packages/dmn-marshaller-backend-compatibility-tester/src/DmnValidation.java 
b/packages/dmn-marshaller-backend-compatibility-tester/src/DmnValidation.java
new file mode 100644
index 00000000000..e47b3d04d6d
--- /dev/null
+++ 
b/packages/dmn-marshaller-backend-compatibility-tester/src/DmnValidation.java
@@ -0,0 +1,135 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+///usr/bin/env jbang "$0" "$@" ; exit $?
+//SOURCES ./DmnMarshallerBackendCompatibilityTesterScript.java
+/* Please do not declare new dependencies here, but in the above Parent class 
to preserve 
+ *  the dependencies fetching mechanism */
+
+package jbang;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import picocli.CommandLine;
+import picocli.CommandLine.Command;
+import picocli.CommandLine.Option;
+
+import org.kie.dmn.api.core.DMNMessage;
+import org.kie.dmn.core.compiler.profiles.ExtendedDMNProfile;
+import org.kie.dmn.validation.DMNValidator;
+import org.kie.dmn.validation.DMNValidator.Validation;
+import org.kie.dmn.validation.DMNValidatorFactory;
+
+/**
+ * JBang script that performs DMN files' XML (in string format) validation
+ * relying on KIE DMN Validator
+ * 
(https://github.com/apache/incubator-kie-drools/tree/main/kie-dmn/kie-dmn-validation).
+ * The script can manage one or two (in case of imported model) DMN file paths.
+ * The XSD SCHEMA, DMN COMPLIANCE and DMN COMPILATION are validated.
+ */
+@Command(name = "DmnSemanticComparison", mixinStandardHelpOptions = true, 
version = "DmnSemanticComparison 0.1", description = "It validates given DMN 
files")
+class DmnValidation extends DmnMarshallerBackendCompatibilityTesterScript {
+
+    private static final Logger LOGGER = 
LoggerFactory.getLogger(DmnValidation.class);
+
+    @Option(names = {"-c", "--command"}, description = "Command to execute 
(no_imports) or (with_imports)", required = true)
+    private String command;
+
+    @Option(names = {"-d", "--dmnFilePath"}, description = "Path of DMN file 
to be validated", required = true)
+    private String dmnFilePath;
+
+    @Option(names = {"-i", "--importedDmnFilesPaths"} , description = "Paths 
of the DMN files imported by the DMN file to validate", required = false, split 
= ",")
+    private String[] importedDmnFilesPath;
+
+    public static void main(String... args) {
+        int exitCode = new CommandLine(new DmnValidation()).execute(args);
+        System.exit(exitCode);
+    }
+
+    @Override
+    public Integer call() {
+        try {
+            switch (command) {
+                case "no_imports":
+                    return validateDMNModelsNoImports();
+                case "with_imports": {
+                    if (importedDmnFilesPath == null || 
importedDmnFilesPath.length == 0) {
+                        throw new IllegalArgumentException("Imported DMN paths 
are missing");
+                    }
+                    return validateDMNModelsWithImports();
+                }
+                default:
+                    LOGGER.error("Unknown command {}", command);
+                    return 1;
+            }
+        } catch (Exception e) {
+            LOGGER.error("Failed to execute {}", command, e);
+            return 100;
+        }
+    }
+
+    private int validateDMNModelsNoImports() {
+        File dmnFile = new File(dmnFilePath);
+        DMNValidator dmnValidator = 
DMNValidatorFactory.newValidator(List.of(new ExtendedDMNProfile()));
+        final List<DMNMessage> messages = 
dmnValidator.validateUsing(Validation.VALIDATE_SCHEMA,
+                Validation.VALIDATE_MODEL,
+                Validation.VALIDATE_COMPILATION)
+                .theseModels(dmnFile);
+        return assessDMNMessageResults(messages, dmnFile.getName());
+    }
+
+    private int validateDMNModelsWithImports() {
+        File dmnFile = new File(dmnFilePath);
+        List<File> models = new ArrayList<>();
+        models.add(dmnFile);
+        models.addAll(Stream.of(importedDmnFilesPath)
+                .map(File::new)
+                .collect(Collectors.toList()));
+        DMNValidator dmnValidator = 
DMNValidatorFactory.newValidator(List.of(new ExtendedDMNProfile()));
+        List<DMNMessage> messages = dmnValidator.validateUsing(
+                Validation.VALIDATE_SCHEMA,
+                Validation.VALIDATE_MODEL,
+                Validation.VALIDATE_COMPILATION)
+                .theseModels(models.toArray(File[]::new));
+        return assessDMNMessageResults(messages, dmnFile.getName());
+    }
+
+    private int assessDMNMessageResults(List<DMNMessage> dmnMessageResults, 
String dmnFileName) {
+        if (dmnMessageResults.size() == 0) {
+            LOGGER.info("RESULT: Following files have been successfully 
validated!");
+            return 0;
+        } else {
+            LOGGER.error("ERROR: DMN Validation failed for the DMN file " + 
dmnFileName);
+            LOGGER.error("Validation Errors:");
+            List<String> messages = 
dmnMessageResults.stream().map(DMNMessage::getText).collect(Collectors.toList());
+            messages.forEach(LOGGER::error);
+            System.err.println("ERROR: DMN Validation failed!");
+            System.err.println("DMN File Name: " + dmnFileName);
+            messages.forEach(System.err::println);
+            return 1;
+        }
+    }
+}
\ No newline at end of file
diff --git 
a/packages/dmn-marshaller-backend-compatibility-tester/src/dependenciesFetch.ts 
b/packages/dmn-marshaller-backend-compatibility-tester/src/dependenciesFetch.ts
new file mode 100644
index 00000000000..6b040cf0dfe
--- /dev/null
+++ 
b/packages/dmn-marshaller-backend-compatibility-tester/src/dependenciesFetch.ts
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import { executeParentScript } from ".";
+
+/**
+ * This file can be called to perform the JBang dependency prefetch.
+ * To call it in a package.json script, use:
+ * `node dist/dependenciesFetch.js` command.
+ */
+
+executeParentScript();
diff --git a/packages/dmn-marshaller-backend-compatibility-tester/src/index.ts 
b/packages/dmn-marshaller-backend-compatibility-tester/src/index.ts
new file mode 100644
index 00000000000..a983a0ba4b2
--- /dev/null
+++ b/packages/dmn-marshaller-backend-compatibility-tester/src/index.ts
@@ -0,0 +1,89 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+import * as path from "path";
+const buildEnv = require("../env");
+const jbang = require("@jbangdev/jbang");
+
+const parentScriptPath = path.join(__dirname, "..", "src", 
"DmnMarshallerBackendCompatibilityTesterScript.java");
+const dmnValidationScriptPath = path.join(__dirname, "..", "src", 
"DmnValidation.java");
+const dmnSemanticComparisonPath = path.join(__dirname, "..", "src", 
"DmnSemanticComparison.java");
+
+export function executeParentScript() {
+  executeScript(parentScriptPath);
+}
+
+export function checkDmnValidation(data: { dmnFilePath: string }) {
+  const command = "--command=no_imports";
+  const dmnFilePath = "--dmnFilePath=" + data.dmnFilePath;
+
+  executeScript(dmnValidationScriptPath, [command, dmnFilePath]);
+}
+
+export function checkDmnValidationWithImports(data: { dmnFilePath: string; 
importedDmnFilesPaths: string[] }) {
+  const command = "--command=with_imports";
+  const dmnFilePath = "--dmnFilePath=" + data.dmnFilePath;
+  const importedDmnFilesPaths = "--importedDmnFilesPaths=" + 
data.importedDmnFilesPaths.join(",");
+
+  executeScript(dmnValidationScriptPath, [command, dmnFilePath, 
importedDmnFilesPaths]);
+}
+
+export function checkDmnSemanticComparison(data: { originalDmnFilePath: 
string; generatedDmnFilePath: string }) {
+  const command = "--command=no_imports";
+  const originalDmnFilePath = "--originalDmnFilePath=" + 
data.originalDmnFilePath;
+  const generatedDmnFilePath = "--generatedDmnFilePath=" + 
data.generatedDmnFilePath;
+
+  executeScript(dmnSemanticComparisonPath, [command, originalDmnFilePath, 
generatedDmnFilePath]);
+}
+
+export function checkDmnSemanticComparisonWithImports(data: {
+  originalDmnFilePath: string;
+  generatedDmnFilePath: string;
+  importedOriginalDmnFilesPaths: string[];
+  importedGeneratedDmnFilesPaths: string[];
+}) {
+  const command = "--command=with_imports";
+  const originalDmnFilePath = "--originalDmnFilePath=" + 
data.originalDmnFilePath;
+  const generatedDmnFilePath = "--generatedDmnFilePath=" + 
data.generatedDmnFilePath;
+  const importedOriginalDmnFilesPaths =
+    "--importedOriginalDmnFilesPaths=" + 
data.importedOriginalDmnFilesPaths.join(",");
+  const importedGeneratedDmnFilesPaths =
+    "--importedGeneratedDmnFilesPaths=" + 
data.importedGeneratedDmnFilesPaths.join(",");
+
+  executeScript(dmnSemanticComparisonPath, [
+    command,
+    originalDmnFilePath,
+    generatedDmnFilePath,
+    importedOriginalDmnFilesPaths,
+    importedGeneratedDmnFilesPaths,
+  ]);
+}
+
+function executeScript(scriptPath: string, args?: string[]) {
+  /* Windows requires double quotes to wrap the argument, while in POSIX it 
must be wrapped by single quotes */
+  const isWindowsPath = path.sep !== "/";
+  const quoteChar = isWindowsPath ? '"' : "'";
+
+  const jbangArgs = [] as string[];
+  jbangArgs.push("-Dkogito-runtime.version=" + 
buildEnv.env.kogitoRuntime.version);
+  jbangArgs.push(scriptPath);
+  args?.forEach((arg) => jbangArgs.push(quoteChar + arg + quoteChar));
+
+  jbang.exec("properties@jbangdev", "java.version");
+  jbang.exec(jbangArgs.join(" "));
+}
diff --git a/packages/dmn-marshaller-backend-compatibility-tester/tsconfig.json 
b/packages/dmn-marshaller-backend-compatibility-tester/tsconfig.json
new file mode 100644
index 00000000000..3855f0f523c
--- /dev/null
+++ b/packages/dmn-marshaller-backend-compatibility-tester/tsconfig.json
@@ -0,0 +1,7 @@
+{
+  "extends": "@kie-tools/tsconfig/tsconfig.json",
+  "compilerOptions": {
+    "outDir": "dist"
+  },
+  "include": ["src"]
+}
diff --git a/packages/dmn-marshaller/package.json 
b/packages/dmn-marshaller/package.json
index b713141179c..59fdb804273 100644
--- a/packages/dmn-marshaller/package.json
+++ b/packages/dmn-marshaller/package.json
@@ -28,9 +28,9 @@
     "build:codegen:dmn15": "xml-parser-ts-codegen 
./src/schemas/dmn-1_5/DMN15.xsd definitions",
     "build:codegen:kie10": "xml-parser-ts-codegen 
./src/schemas/kie-1_0/KIE.xsd ComponentsWidthsExtension",
     "build:dev": "rimraf dist && pnpm build:codegen && tsc -p tsconfig.json",
-    "build:prod": "pnpm lint && rimraf dist &&  pnpm build:codegen && tsc -p 
tsconfig.json && pnpm test",
+    "build:prod": "pnpm lint && rimraf dist && pnpm build:codegen && tsc -p 
tsconfig.json && pnpm test",
     "lint": "run-script-if --bool \"$(build-env linters.run)\" --then 
\"kie-tools--eslint ./src\"",
-    "test": "run-script-if --ignore-errors \"$(build-env 
tests.ignoreFailures)\" --bool \"$(build-env tests.run)\" --then \"jest 
--silent --verbose --passWithNoTests\""
+    "test": "rimraf dist-tests && run-script-if --ignore-errors \"$(build-env 
tests.ignoreFailures)\" --bool \"$(build-env tests.run)\" --then \"jest 
--silent --verbose --passWithNoTests\""
   },
   "dependencies": {
     "@kie-tools/xml-parser-ts": "workspace:*"
@@ -39,6 +39,8 @@
     "@babel/core": "^7.16.0",
     "@babel/preset-env": "^7.16.0",
     "@babel/preset-react": "^7.16.0",
+    "@kie-tools/dmn-marshaller-backend-compatibility-tester": "workspace:*",
+    "@kie-tools/dmn-testing-models": "workspace:*",
     "@kie-tools/eslint": "workspace:*",
     "@kie-tools/root-env": "workspace:*",
     "@kie-tools/tsconfig": "workspace:*",
diff --git 
a/packages/dmn-marshaller/tests-data--manual/other/decisionAndInputWithAddition.dmn
 
b/packages/dmn-marshaller/tests-data--manual/other/decisionAndInputWithAddition.dmn
new file mode 100644
index 00000000000..e7d671283f5
--- /dev/null
+++ 
b/packages/dmn-marshaller/tests-data--manual/other/decisionAndInputWithAddition.dmn
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<definitions xmlns="https://www.omg.org/spec/DMN/20230324/MODEL/";
+    expressionLanguage="https://www.omg.org/spec/DMN/20230324/FEEL/";
+    namespace="https://kie.org/dmn/_D19C1092-7677-427F-A493-BCED38F74A9B";
+    id="_11655DE3-BEA5-45B1-B54E-8AD84FBBED25" 
name="DMN_1E889EDB-B967-4508-8DB1-E0DF5986E62F"
+    xmlns:dmndi="https://www.omg.org/spec/DMN/20230324/DMNDI/";
+    xmlns:dc="http://www.omg.org/spec/DMN/20180521/DC/";
+    xmlns:di="http://www.omg.org/spec/DMN/20180521/DI/";
+    xmlns:kie="https://kie.org/dmn/extensions/1.0";>
+    <import name="some-import" namespace="some-namespace" 
importType="some-import-type" />
+    <inputData name="New Input Data" 
id="_154F9E03-B180-4C87-B7D3-8745DA4336F4">
+        <variable name="New Input Data" 
id="_A28401DD-9A87-4251-A1E4-C63FC3A7C729" typeRef="string" />
+    </inputData>
+    <decision name="New Decision" id="_392BEF3D-44B5-47DC-8A06-C36F15DB2984">
+        <variable id="_C2C9C21A-E708-46D9-876A-52BB25692B66" typeRef="string" 
name="New Decision" />
+        <informationRequirement id="_E781E253-D97E-4A1D-BE51-037B012B30F0">
+            <requiredInput href="#_154F9E03-B180-4C87-B7D3-8745DA4336F4" />
+        </informationRequirement>
+        <literalExpression id="_509ED9AF-3852-48F4-89A7-3CCF221B809C" 
label="New Decision"
+            typeRef="string">
+            <text>&quot;New Decision&quot;</text>
+        </literalExpression>
+    </decision>
+    <group name="some-group" />
+    <dmndi:DMNDI>
+        <dmndi:DMNDiagram id="_0D2FD42B-91FF-4795-B71F-E501CE115389" 
name="Default DRD"
+            useAlternativeInputDataShape="false">
+            <di:extension>
+                <kie:ComponentsWidthsExtension>
+                    <kie:ComponentWidths 
dmnElementRef="_509ED9AF-3852-48F4-89A7-3CCF221B809C">
+                        <kie:width>190</kie:width>
+                    </kie:ComponentWidths>
+                </kie:ComponentsWidthsExtension>
+            </di:extension>
+            <dmndi:DMNShape id="_92B3305F-A892-4E38-BD92-398906A9BC24"
+                dmnElementRef="_154F9E03-B180-4C87-B7D3-8745DA4336F4" 
isCollapsed="false"
+                isListedInputData="false">
+                <dc:Bounds x="100" y="280" width="160" height="80" />
+            </dmndi:DMNShape>
+            <dmndi:DMNShape id="_1E49EEEB-9296-4AE5-B37C-2EE0044C0CC2"
+                dmnElementRef="_392BEF3D-44B5-47DC-8A06-C36F15DB2984" 
isCollapsed="false"
+                isListedInputData="false">
+                <dc:Bounds x="100" y="100" width="160" height="80" />
+            </dmndi:DMNShape>
+            <dmndi:DMNEdge 
id="_C54C8ED9-7DB2-47BC-844A-E79D7142844B-AUTO-TARGET"
+                dmnElementRef="_E781E253-D97E-4A1D-BE51-037B012B30F0"
+                sourceElement="_92B3305F-A892-4E38-BD92-398906A9BC24"
+                targetElement="_1E49EEEB-9296-4AE5-B37C-2EE0044C0CC2">
+                <di:waypoint x="180" y="320" />
+                <di:waypoint x="180" y="140" />
+            </dmndi:DMNEdge>
+        </dmndi:DMNDiagram>
+    </dmndi:DMNDI>
+</definitions>
\ No newline at end of file
diff --git a/packages/dmn-marshaller/tests/dmnSemanticComparison.test.ts 
b/packages/dmn-marshaller/tests/dmnSemanticComparison.test.ts
new file mode 100644
index 00000000000..6afba933770
--- /dev/null
+++ b/packages/dmn-marshaller/tests/dmnSemanticComparison.test.ts
@@ -0,0 +1,159 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import * as fs from "fs";
+import * as path from "path";
+import { getMarshaller } from "@kie-tools/dmn-marshaller";
+import { fail } from "assert";
+import {
+  checkDmnSemanticComparison,
+  checkDmnSemanticComparisonWithImports,
+} from "@kie-tools/dmn-marshaller-backend-compatibility-tester";
+
+/**
+ * This test suite compares the xml generated (parsed and built) by the 
dmn-parser with the original xml.
+ * The original xml and the generated one are passed and compered to the KIE 
DMN Core backend API.
+ * A JBang script is used to actually call the KIE DMN Core backend API.
+ */
+
+const dmnTestingModelsPath = 
path.dirname(require.resolve("@kie-tools/dmn-testing-models/package.json"));
+
+const dmnTestingModels = [
+  "dist/valid_models/DMNv1_5/AllowedValuesChecksInsideCollection.dmn",
+  "dist/valid_models/DMNv1_5/DateToDateTimeFunction.dmn",
+  "dist/valid_models/DMNv1_5/ForLoopDatesEvaluate.dmn",
+  "dist/valid_models/DMNv1_5/Imported_Model_Unamed.dmn",
+  "dist/valid_models/DMNv1_5/ListReplaceEvaluate.dmn",
+  "dist/valid_models/DMNv1_5/NegationOfDurationEvaluate.dmn",
+  "dist/valid_models/DMNv1_5/TypeConstraintsChecks.dmn",
+  "dist/valid_models/DMNv1_x/multiple/Financial.dmn",
+  "dist/valid_models/DMNv1_x/multiple/Imported_Traffic_Violation.dmn",
+  "dist/valid_models/DMNv1_x/multiple/stdlib.dmn",
+  "dist/valid_models/DMNv1_x/allTypes.dmn",
+  "dist/valid_models/DMNv1_x/dtevent.dmn",
+  "dist/valid_models/DMNv1_x/habitability.dmn",
+  "dist/valid_models/DMNv1_x/loan.dmn",
+  "dist/valid_models/DMNv1_x/LoanEligibility.dmn",
+  "dist/valid_models/DMNv1_x/OneOfEachType.dmn",
+  "dist/valid_models/DMNv1_x/Prequalification.dmn",
+  "dist/valid_models/DMNv1_x/testWithExtensionElements.dmn",
+  "dist/valid_models/DMNv1_x/Traffic Violation Simple.dmn",
+  "dist/valid_models/DMNv1_x/Traffic Violation.dmn",
+];
+
+const dmnTestingImportedModels = [
+  {
+    imported: "dist/valid_models/DMNv1_5/Imported_Model_Unamed.dmn",
+    importer: 
"dist/valid_models/DMNv1_5/Importing_EmptyNamed_Model_With_Href_Namespace.dmn",
+  },
+  {
+    imported: "dist/valid_models/DMNv1_5/Imported_Model_Unamed.dmn",
+    importer: 
"dist/valid_models/DMNv1_5/Importing_EmptyNamed_Model_Without_Href_Namespace.dmn",
+  },
+  {
+    imported: "dist/valid_models/DMNv1_5/Imported_Model_Unamed.dmn",
+    importer: "dist/valid_models/DMNv1_5/Importing_Named_Model.dmn",
+  },
+  {
+    imported: "dist/valid_models/DMNv1_5/Imported_Model_Unamed.dmn",
+    importer: 
"dist/valid_models/DMNv1_5/Importing_OverridingEmptyNamed_Model.dmn",
+  },
+  {
+    imported: 
"dist/valid_models/DMNv1_x/multiple/Imported_Traffic_Violation.dmn",
+    importer: "dist/valid_models/DMNv1_x/multiple/Traffic Violation With 
Import.dmn",
+  },
+];
+
+export const dmnSemanticComparisonGeneratedFilesDirectory = path.join(
+  __dirname,
+  "../../dist-tests/dmnSemanticComparison-generated-files"
+);
+
+describe("DMN Semantic Comparison", () => {
+  beforeAll(() => {
+    if (fs.existsSync(dmnSemanticComparisonGeneratedFilesDirectory)) {
+      fs.rmSync(dmnSemanticComparisonGeneratedFilesDirectory, { recursive: 
true });
+    }
+    fs.mkdirSync(dmnSemanticComparisonGeneratedFilesDirectory, { recursive: 
true });
+  });
+
+  for (const file of dmnTestingModels) {
+    testFile(path.join(dmnTestingModelsPath, file));
+  }
+  for (const file of dmnTestingImportedModels) {
+    file.imported = path.join(dmnTestingModelsPath, file.imported);
+    file.importer = path.join(dmnTestingModelsPath, file.importer);
+    testImportedFile(file);
+  }
+});
+
+function testFile(normalizedFsPathRelativeToTheFile: string) {
+  test(
+    "DMN Semantic Comparison: " +
+      
normalizedFsPathRelativeToTheFile.substring(normalizedFsPathRelativeToTheFile.lastIndexOf(path.sep)
 + 1),
+    () => {
+      const generatedXmlFilePath = 
parseXmlAndWriteInFile(normalizedFsPathRelativeToTheFile);
+
+      try {
+        checkDmnSemanticComparison({
+          originalDmnFilePath: normalizedFsPathRelativeToTheFile,
+          generatedDmnFilePath: generatedXmlFilePath,
+        });
+      } catch (error) {
+        fail(error.cause);
+      }
+    }
+  );
+}
+
+function testImportedFile(normalizedFsPathRelativeToTheFiles: { imported: 
string; importer: string }) {
+  test(
+    "DMN Semantic Comparison: " +
+      normalizedFsPathRelativeToTheFiles.importer.substring(
+        normalizedFsPathRelativeToTheFiles.importer.lastIndexOf(path.sep) + 1
+      ),
+    () => {
+      const importedGeneratedXmlFilePath = 
parseXmlAndWriteInFile(normalizedFsPathRelativeToTheFiles.imported);
+      const importerGeneratedXmlFilePath = 
parseXmlAndWriteInFile(normalizedFsPathRelativeToTheFiles.importer);
+
+      try {
+        checkDmnSemanticComparisonWithImports({
+          originalDmnFilePath: normalizedFsPathRelativeToTheFiles.importer,
+          generatedDmnFilePath: importerGeneratedXmlFilePath,
+          importedOriginalDmnFilesPaths: 
[normalizedFsPathRelativeToTheFiles.imported],
+          importedGeneratedDmnFilesPaths: [importedGeneratedXmlFilePath],
+        });
+      } catch (error) {
+        fail(error.cause);
+      }
+    }
+  );
+}
+
+function parseXmlAndWriteInFile(normalizedFsPathRelativeToTheFile: string): 
string {
+  const originalXml = fs.readFileSync(normalizedFsPathRelativeToTheFile, 
"utf-8");
+  const { parser, builder } = getMarshaller(originalXml, { upgradeTo: "latest" 
});
+  const generatedXml = builder.build(parser.parse());
+  const fileName = normalizedFsPathRelativeToTheFile.substring(
+    normalizedFsPathRelativeToTheFile.lastIndexOf(path.sep) + 1
+  );
+  const generatedXmlFilePath = dmnSemanticComparisonGeneratedFilesDirectory + 
path.sep + fileName;
+  fs.writeFileSync(generatedXmlFilePath, generatedXml, "utf-8");
+  return generatedXmlFilePath;
+}
diff --git a/packages/dmn-marshaller/tests/dmnValidation.test.ts 
b/packages/dmn-marshaller/tests/dmnValidation.test.ts
new file mode 100644
index 00000000000..9c3c4a904d2
--- /dev/null
+++ b/packages/dmn-marshaller/tests/dmnValidation.test.ts
@@ -0,0 +1,150 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import * as fs from "fs";
+import * as path from "path";
+import { getMarshaller } from "@kie-tools/dmn-marshaller";
+import { fail } from "assert";
+import {
+  checkDmnValidation,
+  checkDmnValidationWithImports,
+} from "@kie-tools/dmn-marshaller-backend-compatibility-tester";
+
+/**
+ * This test suite validates the xml produced (parsed and built) by the 
marshaller relying on KIE DMN Validator
+ * 
(https://github.com/apache/incubator-kie-drools/tree/main/kie-dmn/kie-dmn-validation).
+ * A JBang script is used to actually call the KIE DMN Validator Java code.
+ */
+
+const dmnTestingModelsPath = 
path.dirname(require.resolve("@kie-tools/dmn-testing-models/package.json"));
+
+const dmnTestingModels = [
+  "dist/valid_models/DMNv1_5/AllowedValuesChecksInsideCollection.dmn",
+  "dist/valid_models/DMNv1_5/DateToDateTimeFunction.dmn",
+  "dist/valid_models/DMNv1_5/ForLoopDatesEvaluate.dmn",
+  "dist/valid_models/DMNv1_5/Imported_Model_Unamed.dmn",
+  "dist/valid_models/DMNv1_5/ListReplaceEvaluate.dmn",
+  "dist/valid_models/DMNv1_5/NegationOfDurationEvaluate.dmn",
+  "dist/valid_models/DMNv1_5/TypeConstraintsChecks.dmn",
+  "dist/valid_models/DMNv1_x/multiple/Financial.dmn",
+  "dist/valid_models/DMNv1_x/multiple/Imported_Traffic_Violation.dmn",
+  "dist/valid_models/DMNv1_x/multiple/stdlib.dmn",
+  "dist/valid_models/DMNv1_x/allTypes.dmn",
+  "dist/valid_models/DMNv1_x/dtevent.dmn",
+  "dist/valid_models/DMNv1_x/habitability.dmn",
+  "dist/valid_models/DMNv1_x/loan.dmn",
+  "dist/valid_models/DMNv1_x/LoanEligibility.dmn",
+  "dist/valid_models/DMNv1_x/OneOfEachType.dmn",
+  "dist/valid_models/DMNv1_x/Prequalification.dmn",
+  "dist/valid_models/DMNv1_x/testWithExtensionElements.dmn",
+  "dist/valid_models/DMNv1_x/Traffic Violation Simple.dmn",
+  "dist/valid_models/DMNv1_x/Traffic Violation.dmn",
+];
+
+const dmnTestingImportedModels = [
+  {
+    imported: "dist/valid_models/DMNv1_5/Imported_Model_Unamed.dmn",
+    importer: 
"dist/valid_models/DMNv1_5/Importing_EmptyNamed_Model_With_Href_Namespace.dmn",
+  },
+  {
+    imported: "dist/valid_models/DMNv1_5/Imported_Model_Unamed.dmn",
+    importer: 
"dist/valid_models/DMNv1_5/Importing_EmptyNamed_Model_Without_Href_Namespace.dmn",
+  },
+  {
+    imported: "dist/valid_models/DMNv1_5/Imported_Model_Unamed.dmn",
+    importer: "dist/valid_models/DMNv1_5/Importing_Named_Model.dmn",
+  },
+  {
+    imported: "dist/valid_models/DMNv1_5/Imported_Model_Unamed.dmn",
+    importer: 
"dist/valid_models/DMNv1_5/Importing_OverridingEmptyNamed_Model.dmn",
+  },
+  {
+    imported: 
"dist/valid_models/DMNv1_x/multiple/Imported_Traffic_Violation.dmn",
+    importer: "dist/valid_models/DMNv1_x/multiple/Traffic Violation With 
Import.dmn",
+  },
+];
+export const dmnValidationGeneratedFilesDirectory = path.join(__dirname, 
"../dist-tests/dmnValidation-generated-files");
+
+describe("DMN Validation", () => {
+  beforeAll(() => {
+    if (fs.existsSync(dmnValidationGeneratedFilesDirectory)) {
+      fs.rmSync(dmnValidationGeneratedFilesDirectory, { recursive: true });
+    }
+    fs.mkdirSync(dmnValidationGeneratedFilesDirectory, { recursive: true });
+  });
+
+  for (const file of dmnTestingModels) {
+    testFile(path.join(dmnTestingModelsPath, file));
+  }
+  for (const file of dmnTestingImportedModels) {
+    file.imported = path.join(dmnTestingModelsPath, file.imported);
+    file.importer = path.join(dmnTestingModelsPath, file.importer);
+    testImportedFile(file);
+  }
+});
+
+function testFile(normalizedFsPathRelativeToTheFile: string) {
+  test(
+    "DMN Validation: " +
+      
normalizedFsPathRelativeToTheFile.substring(normalizedFsPathRelativeToTheFile.lastIndexOf(path.sep)
 + 1),
+    () => {
+      const generatedXmlFilePath = 
parseXmlAndWriteInFile(normalizedFsPathRelativeToTheFile);
+
+      try {
+        checkDmnValidation({ dmnFilePath: generatedXmlFilePath });
+      } catch (error) {
+        fail(error.cause);
+      }
+    }
+  );
+}
+
+function testImportedFile(normalizedFsPathRelativeToTheFiles: { imported: 
string; importer: string }) {
+  test(
+    "DMN Validation: " +
+      normalizedFsPathRelativeToTheFiles.importer.substring(
+        normalizedFsPathRelativeToTheFiles.importer.lastIndexOf(path.sep) + 1
+      ),
+    () => {
+      const importedGeneratedXmlFilePath = 
parseXmlAndWriteInFile(normalizedFsPathRelativeToTheFiles.imported);
+      const importerGeneratedXmlFilePath = 
parseXmlAndWriteInFile(normalizedFsPathRelativeToTheFiles.importer);
+
+      try {
+        checkDmnValidationWithImports({
+          dmnFilePath: importedGeneratedXmlFilePath,
+          importedDmnFilesPaths: [importerGeneratedXmlFilePath],
+        });
+      } catch (error) {
+        fail(error.cause);
+      }
+    }
+  );
+}
+
+function parseXmlAndWriteInFile(normalizedFsPathRelativeToTheFile: string): 
string {
+  const originalXml = fs.readFileSync(normalizedFsPathRelativeToTheFile, 
"utf-8");
+  const { parser, builder } = getMarshaller(originalXml, { upgradeTo: "latest" 
});
+  const generatedXml = builder.build(parser.parse());
+  const fileName = normalizedFsPathRelativeToTheFile.substring(
+    normalizedFsPathRelativeToTheFile.lastIndexOf(path.sep) + 1
+  );
+  const generatedXmlFilePath = dmnValidationGeneratedFilesDirectory + path.sep 
+ fileName;
+  fs.writeFileSync(generatedXmlFilePath, generatedXml, "utf-8");
+  return generatedXmlFilePath;
+}
diff --git a/packages/dmn-marshaller/tests/idempotency.test.ts 
b/packages/dmn-marshaller/tests/idempotency.test.ts
index bc4f78cdefc..117aa91ae43 100644
--- a/packages/dmn-marshaller/tests/idempotency.test.ts
+++ b/packages/dmn-marshaller/tests/idempotency.test.ts
@@ -21,6 +21,8 @@ import * as fs from "fs";
 import * as path from "path";
 import { getMarshaller } from "@kie-tools/dmn-marshaller";
 
+const dmnTestingModels = 
path.dirname(require.resolve("@kie-tools/dmn-testing-models/package.json"));
+
 const files = [
   "../tests-data--manual/other/attachment.dmn",
   "../tests-data--manual/other/empty13.dmn",
@@ -32,18 +34,40 @@ const files = [
   "../tests-data--manual/dmn-1_4--examples/Chapter 11 Example 1 
Originations/Chapter 11 Example.dmn",
 ];
 
+const testing_models_paths = ["dist/valid_models/DMNv1_5/", 
"dist/valid_models/DMNv1_x/"];
+
 describe("idempotency", () => {
   for (const file of files) {
-    test(path.basename(file), () => {
-      const xml_original = fs.readFileSync(path.join(__dirname, file), 
"utf-8");
+    testFile(path.join(__dirname, file));
+  }
+  for (const models_paths of testing_models_paths) {
+    const parentPath = path.join(dmnTestingModels, models_paths);
+    testDirectory(parentPath);
+  }
+});
 
-      const { parser, builder } = getMarshaller(xml_original, { upgradeTo: 
"latest" });
-      const json = parser.parse();
+function testDirectory(normalizedFsPathRelativeToTheDirectory: string) {
+  fs.readdirSync(normalizedFsPathRelativeToTheDirectory).forEach((file) => {
+    const childPath = path.join(normalizedFsPathRelativeToTheDirectory, file);
+    const stats = fs.statSync(childPath);
+    if (stats.isFile()) {
+      testFile(childPath);
+    } else {
+      testDirectory(childPath);
+    }
+  });
+}
 
-      const xml_firstPass = builder.build(json);
-      const xml_secondPass = builder.build(getMarshaller(xml_firstPass, { 
upgradeTo: "latest" }).parser.parse());
+function testFile(normalizedFsPathRelativeToTheFile: string) {
+  
test(normalizedFsPathRelativeToTheFile.substring(normalizedFsPathRelativeToTheFile.lastIndexOf(path.sep)
 + 1), () => {
+    const xmlOriginal = fs.readFileSync(normalizedFsPathRelativeToTheFile, 
"utf-8");
 
-      expect(xml_firstPass).toStrictEqual(xml_secondPass);
-    });
-  }
-});
+    const { parser, builder } = getMarshaller(xmlOriginal, { upgradeTo: 
"latest" });
+    const json = parser.parse();
+
+    const xmlFirstPass = builder.build(json);
+    const xmlSecondPass = builder.build(getMarshaller(xmlFirstPass, { 
upgradeTo: "latest" }).parser.parse());
+
+    expect(xmlFirstPass).toStrictEqual(xmlSecondPass);
+  });
+}
diff --git a/packages/dmn-testing-models/LICENSE 
b/packages/dmn-testing-models/LICENSE
new file mode 100644
index 00000000000..261eeb9e9f8
--- /dev/null
+++ b/packages/dmn-testing-models/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
diff --git a/packages/dmn-testing-models/README.md 
b/packages/dmn-testing-models/README.md
new file mode 100644
index 00000000000..4fbb9663200
--- /dev/null
+++ b/packages/dmn-testing-models/README.md
@@ -0,0 +1,20 @@
+## DMN testing models
+
+This package is meant to contain all the DMN models published inside 
[kie-dmn-test-resources](https://github.com/apache/incubator-kie-drools/tree/main/kie-dmn/kie-dmn-test-resources)
 to make them available for testing purposes.
+
+Models are separated between < 1.5 version and 1.5 version; such 
classification is based on actual version-specific features, and not on the 
referenced tag itself.
+
+For future DMN versions there will be version specific folders.
+
+The original `org.kie:kie-dmn-test-resources` also contains _invalid_ models, 
but for the moment being we use only the valid ones to verify round-trip 
validation.
+
+### Usage
+
+The command `mvn clean verify` downloads the jar and extract the models under 
`dist/`.
+
+To make them available for testing purpose:
+
+1. set the `KOGITO_RUNTIME_version` in the terminal (if different from the 
default one)
+2. `pnpm bootstrap` on the root directory
+3. cd dmn-testing-models
+4. `pnpm build:dev` or `pnpm build:prod` (they behave the same way - this 
executes `mvn clean verify`)
diff --git a/packages/dmn-testing-models/env/index.js 
b/packages/dmn-testing-models/env/index.js
new file mode 100644
index 00000000000..f18c16804ef
--- /dev/null
+++ b/packages/dmn-testing-models/env/index.js
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+const { varsWithName, composeEnv } = require("@kie-tools-scripts/build-env");
+
+module.exports = composeEnv([require("@kie-tools/root-env/env")], {
+  vars: varsWithName({}),
+  get env() {
+    return {
+      dmnTestingModels: {
+        version: require("../package.json").version,
+      },
+    };
+  },
+});
diff --git a/packages/dmn-testing-models/index.js 
b/packages/dmn-testing-models/index.js
new file mode 100644
index 00000000000..e3745dd42a2
--- /dev/null
+++ b/packages/dmn-testing-models/index.js
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/** Empty Entrypoint of this module - No TS/JS code here, it just holds DMN 
files for testing purposes */
diff --git a/packages/dmn-testing-models/install.js 
b/packages/dmn-testing-models/install.js
new file mode 100644
index 00000000000..6f6ba519d0d
--- /dev/null
+++ b/packages/dmn-testing-models/install.js
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+const buildEnv = require("./env");
+const { setup } = require("@kie-tools/maven-config-setup-helper");
+
+setup(`
+    -Drevision=${buildEnv.env.dmnTestingModels.version}
+    -Dquarkus.platform.version=${buildEnv.env.quarkusPlatform.version}
+    -Dversion.org.kie.kogito=${buildEnv.env.kogitoRuntime.version}
+`);
diff --git a/packages/dmn-testing-models/package.json 
b/packages/dmn-testing-models/package.json
new file mode 100644
index 00000000000..d9e338e2ee1
--- /dev/null
+++ b/packages/dmn-testing-models/package.json
@@ -0,0 +1,40 @@
+{
+  "private": true,
+  "name": "@kie-tools/dmn-testing-models",
+  "version": "0.0.0",
+  "description": "",
+  "license": "Apache-2.0",
+  "homepage": "https://github.com/apache/incubator-kie-tools";,
+  "repository": {
+    "type": "git",
+    "url": "https://github.com/apache/incubator-kie-tools.git";
+  },
+  "bugs": {
+    "url": "https://github.com/apache/incubator-kie-tools/issues";
+  },
+  "files": [
+    "dist"
+  ],
+  "scripts": {
+    "build:dev": "rimraf dist && copyfiles index.js dist/ && run-script-os",
+    "build:dev:linux:darwin": "mvn clean verify",
+    "build:dev:win32": "pnpm powershell \"mvn clean verify\"",
+    "build:prod": "pnpm build:dev",
+    "install": "node install.js",
+    "powershell": "@powershell -NoProfile -ExecutionPolicy Unrestricted 
-Command"
+  },
+  "devDependencies": {
+    "@kie-tools/maven-base": "workspace:*",
+    "@kie-tools/maven-config-setup-helper": "workspace:*",
+    "@kie-tools/root-env": "workspace:*",
+    "copyfiles": "^2.4.1",
+    "rimraf": "^3.0.2",
+    "run-script-os": "^1.1.6"
+  },
+  "kieTools": {
+    "requiredPreinstalledCliCommands": [
+      "java",
+      "mvn"
+    ]
+  }
+}
\ No newline at end of file
diff --git a/packages/dmn-testing-models/pom.xml 
b/packages/dmn-testing-models/pom.xml
new file mode 100644
index 00000000000..cf5273e8a7a
--- /dev/null
+++ b/packages/dmn-testing-models/pom.xml
@@ -0,0 +1,145 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~ 
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~ 
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.      
+-->
+<project
+  xmlns="http://maven.apache.org/POM/4.0.0";
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
https://maven.apache.org/xsd/maven-4.0.0.xsd";
+>
+
+  <parent>
+    <groupId>org.kie</groupId>
+    <artifactId>kie-tools-maven-base</artifactId>
+    <version>${revision}</version>
+    <relativePath>./node_modules/@kie-tools/maven-base/pom.xml</relativePath>
+  </parent>
+
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>org.kie.tools</groupId>
+    <artifactId>dmn-testing-models</artifactId>
+    <version>${revision}</version>
+    <packaging>jar</packaging>
+
+    <name>DMN Testing Models</name>
+    <description>Testing models for DMN marshaller</description>
+
+    <licenses>
+        <license>
+            <name>Apache Software License, Version 2.0</name>
+            <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
+            <distribution>repo</distribution>
+        </license>
+    </licenses>
+
+    <scm>
+        
<connection>scm:git:[email protected]:apache/incubator-kie-tools.git</connection>
+        
<developerConnection>scm:git:[email protected]:apache/incubator-kie-tools.git</developerConnection>
+        <url>scm:git:[email protected]:apache/incubator-kie-tools.git</url>
+    </scm>
+
+    <repositories>
+        <repository>
+      <!-- Duplicating the Maven Central repository here (as it is already 
coming from Super POM) makes the build much faster,
+           as the Maven Central is now treated as the first (default) 
repository (because it is before the Apache Nexus one).
+           Artifacts with release (fixed) versions are being downloaded 
primarily from there. Without the central being the
+           first repository the Apache Nexus would be contacted first and 
since it is quite slow it slows down the build.
+           We use Apache repo only to download our SNAPSHOTs. -->
+            <id>central</id>
+            <name>Central Repository</name>
+            <url>https://repo.maven.apache.org/maven2</url>
+            <layout>default</layout>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+        <repository>
+            <id>apache-public-repository-group</id>
+            <name>Apache Public Repository Group</name>
+            <url>https://repository.apache.org/content/groups/public/</url>
+            <releases>
+                <enabled>true</enabled>
+                <updatePolicy>never</updatePolicy>
+            </releases>
+            <snapshots>
+                <enabled>true</enabled>
+                <updatePolicy>daily</updatePolicy>
+            </snapshots>
+        </repository>
+    </repositories>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <dependency-plugin.version>3.6.1</dependency-plugin.version>
+    </properties>
+
+    <dependencyManagement>
+        <dependencies>
+            <dependency>
+                <groupId>org.kie</groupId>
+                <artifactId>kie-dmn-test-resources</artifactId>
+                <version>${version.org.kie.kogito}</version>
+                <classifier>tests</classifier>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.kie</groupId>
+            <artifactId>kie-dmn-test-resources</artifactId>
+            <classifier>tests</classifier>
+        </dependency>
+    </dependencies>
+
+    <build>
+        <plugins>
+            <!-- Unpack DMN resources from org.kie:kie-dmn-test-resources -->
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-dependency-plugin</artifactId>
+                <version>${dependency-plugin.version}</version>
+                <executions>
+                    <execution>
+                        <id>unpack</id>
+                        <phase>generate-resources</phase>
+                        <goals>
+                            <goal>unpack</goal>
+                        </goals>
+                        <configuration>
+                            <artifactItems>
+                                <artifactItem>
+                                    <groupId>org.kie</groupId>
+                                    
<artifactId>kie-dmn-test-resources</artifactId>
+                                    
<version>${version.org.kie.kogito}</version>
+                                    <classifier>tests</classifier>
+                                    <type>jar</type>
+                                    <overWrite>true</overWrite>
+                                    
<outputDirectory>${project.basedir}/dist</outputDirectory>
+                                    <includes>valid_models/**/*.dmn</includes>
+                                </artifactItem>
+                            </artifactItems>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+</project>
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f89784d59f3..4a44a31abe6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -3778,6 +3778,12 @@ importers:
       "@babel/preset-react":
         specifier: ^7.16.0
         version: 7.16.0(@babel/[email protected])
+      "@kie-tools/dmn-marshaller-backend-compatibility-tester":
+        specifier: workspace:*
+        version: link:../dmn-marshaller-backend-compatibility-tester
+      "@kie-tools/dmn-testing-models":
+        specifier: workspace:*
+        version: link:../dmn-testing-models
       "@kie-tools/eslint":
         specifier: workspace:*
         version: link:../eslint
@@ -3818,6 +3824,25 @@ importers:
         specifier: ^4.6.2
         version: 4.8.4
 
+  packages/dmn-marshaller-backend-compatibility-tester:
+    dependencies:
+      "@jbangdev/jbang":
+        specifier: 0.2.0
+        version: 0.2.0
+    devDependencies:
+      "@kie-tools/root-env":
+        specifier: workspace:*
+        version: link:../root-env
+      "@kie-tools/tsconfig":
+        specifier: workspace:*
+        version: link:../tsconfig
+      rimraf:
+        specifier: ^3.0.2
+        version: 3.0.2
+      typescript:
+        specifier: ^4.6.2
+        version: 4.8.4
+
   packages/dmn-runner:
     dependencies:
       "@kie-tools-core/react-hooks":
@@ -3909,6 +3934,27 @@ importers:
         specifier: ^4.6.2
         version: 4.8.4
 
+  packages/dmn-testing-models:
+    devDependencies:
+      "@kie-tools/maven-base":
+        specifier: workspace:*
+        version: link:../maven-base
+      "@kie-tools/maven-config-setup-helper":
+        specifier: workspace:*
+        version: link:../maven-config-setup-helper
+      "@kie-tools/root-env":
+        specifier: workspace:*
+        version: link:../root-env
+      copyfiles:
+        specifier: ^2.4.1
+        version: 2.4.1
+      rimraf:
+        specifier: ^3.0.2
+        version: 3.0.2
+      run-script-os:
+        specifier: ^1.1.6
+        version: 1.1.6
+
   packages/dmn-vscode-extension:
     dependencies:
       "@kie-tools-core/backend":
@@ -22716,6 +22762,14 @@ packages:
     engines: { node: ">=8" }
     dev: true
 
+  /@jbangdev/[email protected]:
+    resolution:
+      { integrity: 
sha512-Ixo6/Y5sXKmNjYlf03xws79siAGEvrZPgNAlSCXK9DZ8xH7hkzdZ0AwE5QDSaMmOwy/yUrLhPhjojwg+WhyBMg==
 }
+    requiresBuild: true
+    dependencies:
+      shelljs: 0.8.5
+    dev: false
+
   /@jest/[email protected]:
     resolution:
       { integrity: 
sha512-IY1R2i2aLsLr7Id3S6p2BA82GNWryt4oSvEXLAKc+L2zdi89dSkE8xC1C+0kpATG4JhBJREnQOH7/zmccM2B0g==
 }
@@ -40180,6 +40234,12 @@ packages:
     engines: { node: ">=12" }
     dev: false
 
+  /[email protected]:
+    resolution:
+      { integrity: 
sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
 }
+    engines: { node: ">= 0.10" }
+    dev: false
+
   /[email protected]:
     resolution:
       { integrity: 
sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==
 }
@@ -40334,13 +40394,6 @@ packages:
       ci-info: 3.3.2
     dev: true
 
-  /[email protected]:
-    resolution:
-      { integrity: 
sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==
 }
-    dependencies:
-      has: 1.0.3
-    dev: true
-
   /[email protected]:
     resolution:
       { integrity: 
sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==
 }
@@ -48219,12 +48272,20 @@ packages:
       tslib: 2.6.2
     dev: true
 
+  /[email protected]:
+    resolution:
+      { integrity: 
sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==
 }
+    engines: { node: ">= 0.10" }
+    dependencies:
+      resolve: 1.22.8
+    dev: false
+
   /[email protected]:
     resolution:
       { integrity: 
sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==
 }
     engines: { node: ">= 0.10" }
     dependencies:
-      resolve: 1.22.1
+      resolve: 1.22.8
     dev: true
 
   /[email protected]:
@@ -48636,7 +48697,7 @@ packages:
       { integrity: 
sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
 }
     hasBin: true
     dependencies:
-      is-core-module: 2.12.0
+      is-core-module: 2.13.1
       path-parse: 1.0.7
       supports-preserve-symlinks-flag: 1.0.0
     dev: true
@@ -49426,6 +49487,17 @@ packages:
       { integrity: 
sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==
 }
     dev: true
 
+  /[email protected]:
+    resolution:
+      { integrity: 
sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==
 }
+    engines: { node: ">=4" }
+    hasBin: true
+    dependencies:
+      glob: 7.2.3
+      interpret: 1.4.0
+      rechoir: 0.6.2
+    dev: false
+
   /[email protected]:
     resolution:
       { integrity: 
sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==
 }
diff --git a/repo/graph.dot b/repo/graph.dot
index 42d228fae32..83b4f2481a8 100644
--- a/repo/graph.dot
+++ b/repo/graph.dot
@@ -91,8 +91,11 @@ digraph G {
   "@kie-tools/dmn-marshaller" [ color = "blue", fontcolor = "blue", style = 
"rounded" ];
   "@kie-tools/dmn-language-service" [ color = "blue", fontcolor = "blue", 
style = "rounded" ];
   "@kie-tools-core/switch-expression-ts" [ color = "purple", fontcolor = 
"purple", style = "rounded" ];
+  "@kie-tools/dmn-marshaller-backend-compatibility-tester" [ color = "black", 
fontcolor = "black", style = "dashed, rounded" ];
+  "@kie-tools/dmn-testing-models" [ color = "black", fontcolor = "black", 
style = "dashed, rounded" ];
   "@kie-tools/dmn-runner" [ color = "blue", fontcolor = "blue", style = 
"rounded" ];
   "@kie-tools/extended-services-api" [ color = "blue", fontcolor = "blue", 
style = "rounded" ];
+  "@kie-tools/maven-base" [ color = "black", fontcolor = "black", style = 
"dashed, rounded" ];
   "dmn-vscode-extension" [ color = "blue", fontcolor = "blue", style = 
"rounded" ];
   "@kie-tools-core/keyboard-shortcuts" [ color = "purple", fontcolor = 
"purple", style = "rounded" ];
   "@kie-tools-core/envelope-bus" [ color = "purple", fontcolor = "purple", 
style = "rounded" ];
@@ -108,7 +111,6 @@ digraph G {
   "@kie-tools/import-java-classes-component" [ color = "blue", fontcolor = 
"blue", style = "rounded" ];
   "@kie-tools-core/vscode-java-code-completion" [ color = "purple", fontcolor 
= "purple", style = "rounded" ];
   "@kie-tools/jbpm-quarkus-devui" [ color = "black", fontcolor = "black", 
style = "dashed, rounded" ];
-  "@kie-tools/maven-base" [ color = "black", fontcolor = "black", style = 
"dashed, rounded" ];
   "@kie-tools/runtime-tools-process-dev-ui-webapp" [ color = "blue", fontcolor 
= "blue", style = "rounded" ];
   "@kie-tools/yaml-language-server" [ color = "blue", fontcolor = "blue", 
style = "rounded" ];
   "@kie-tools-core/k8s-yaml-to-apiserver-requests" [ color = "purple", 
fontcolor = "purple", style = "rounded" ];
@@ -305,10 +307,15 @@ digraph G {
   "@kie-tools/dmn-feel-antlr4-parser" -> "@kie-tools/dmn-marshaller" [ style = 
"solid", color = "blue" ];
   "@kie-tools/dmn-language-service" -> "@kie-tools/dmn-feel-antlr4-parser" [ 
style = "solid", color = "blue" ];
   "@kie-tools/dmn-language-service" -> "@kie-tools-core/switch-expression-ts" 
[ style = "dashed", color = "blue" ];
+  "@kie-tools/dmn-marshaller" -> 
"@kie-tools/dmn-marshaller-backend-compatibility-tester" [ style = "dashed", 
color = "blue" ];
+  "@kie-tools/dmn-marshaller" -> "@kie-tools/dmn-testing-models" [ style = 
"dashed", color = "blue" ];
   "@kie-tools/dmn-marshaller" -> "@kie-tools/xml-parser-ts-codegen" [ style = 
"dashed", color = "blue" ];
+  "@kie-tools/dmn-marshaller-backend-compatibility-tester" -> 
"@kie-tools/root-env" [ style = "dashed", color = "black" ];
+  "@kie-tools/dmn-marshaller-backend-compatibility-tester" -> 
"@kie-tools/tsconfig" [ style = "dashed", color = "black" ];
   "@kie-tools/dmn-runner" -> "@kie-tools-core/react-hooks" [ style = "solid", 
color = "blue" ];
   "@kie-tools/dmn-runner" -> "@kie-tools/extended-services-api" [ style = 
"solid", color = "blue" ];
   "@kie-tools/dmn-runner" -> "@kie-tools/uniforms-patternfly" [ style = 
"solid", color = "blue" ];
+  "@kie-tools/dmn-testing-models" -> "@kie-tools/maven-base" [ style = 
"dashed", color = "black" ];
   "dmn-vscode-extension" -> "@kie-tools-core/vscode-extension" [ style = 
"solid", color = "blue" ];
   "dmn-vscode-extension" -> "@kie-tools/dmn-editor-envelope" [ style = 
"solid", color = "blue" ];
   "dmn-vscode-extension" -> "@kie-tools/kie-bc-editors" [ style = "solid", 
color = "blue" ];
@@ -505,12 +512,10 @@ digraph G {
   "sonataflow-deployment-webapp" -> "@kie-tools-core/react-hooks" [ style = 
"solid", color = "blue" ];
   "sonataflow-deployment-webapp" -> 
"@kie-tools/runtime-tools-shared-webapp-components" [ style = "solid", color = 
"blue" ];
   "sonataflow-deployment-webapp" -> 
"@kie-tools/runtime-tools-swf-webapp-components" [ style = "solid", color = 
"blue" ];
-  "@kie-tools/sonataflow-quarkus-devui" -> "@kie-tools/maven-base" [ style = 
"dashed", color = "black" ];
   "@kie-tools/sonataflow-quarkus-devui" -> 
"@kie-tools/serverless-workflow-dev-ui-webapp" [ style = "dashed", color = 
"black" ];
   "@kie-tools/storybook-base" -> "@kie-tools-core/webpack-base" [ style = 
"dashed", color = "blue" ];
   "@kie-tools/storybook-base" -> "@kie-tools/eslint" [ style = "dashed", color 
= "blue" ];
   "@kie-tools/storybook-base" -> "@kie-tools/tsconfig" [ style = "dashed", 
color = "blue" ];
-  "@kie-tools/stunner-editors" -> "@kie-tools/maven-config-setup-helper" [ 
style = "dashed", color = "black" ];
   "@kie-tools/stunner-editors" -> "@kie-tools/stunner-editors-dmn-loader" [ 
style = "dashed", color = "black" ];
   "@kie-tools/stunner-editors-dmn-loader" -> 
"@kie-tools/boxed-expression-component" [ style = "solid", color = "blue" ];
   "@kie-tools/stunner-editors-dmn-loader" -> 
"@kie-tools/import-java-classes-component" [ style = "solid", color = "blue" ];
diff --git a/repo/graph.json b/repo/graph.json
index 5b13911ba9b..90017b73ac1 100644
--- a/repo/graph.json
+++ b/repo/graph.json
@@ -103,7 +103,10 @@
       { "id": "@kie-tools/dmn-editor-envelope" },
       { "id": "@kie-tools/dmn-feel-antlr4-parser" },
       { "id": "@kie-tools/dmn-marshaller" },
+      { "id": "@kie-tools/dmn-marshaller-backend-compatibility-tester" },
+      { "id": "@kie-tools/dmn-testing-models" },
       { "id": "@kie-tools-core/switch-expression-ts" },
+      { "id": "@kie-tools/maven-base" },
       { "id": "@kie-tools/dmn-runner" },
       { "id": "@kie-tools/extended-services-api" },
       { "id": "dmn-vscode-extension" },
@@ -115,7 +118,6 @@
       { "id": "@kie-tools/image-env-to-json" },
       { "id": "@kie-tools/import-java-classes-component" },
       { "id": "@kie-tools/jbpm-quarkus-devui" },
-      { "id": "@kie-tools/maven-base" },
       { "id": "@kie-tools/runtime-tools-process-dev-ui-webapp" },
       { "id": "@kie-tools/runtime-tools-process-webapp-components" },
       { "id": "@kie-tools/runtime-tools-shared-webapp-components" },
@@ -296,7 +298,6 @@
       { "source": "@kie-tools/kie-bc-editors", "target": 
"@kie-tools-core/vscode-java-code-completion", "weight": 1 },
       { "source": "@kie-tools/kie-bc-editors", "target": 
"@kie-tools/dmn-language-service", "weight": 1 },
       { "source": "@kie-tools/kie-bc-editors", "target": 
"@kie-tools/pmml-editor-marshaller", "weight": 1 },
-      { "source": "@kie-tools/stunner-editors", "target": 
"@kie-tools/maven-config-setup-helper", "weight": 1 },
       { "source": "@kie-tools/stunner-editors", "target": 
"@kie-tools/stunner-editors-dmn-loader", "weight": 1 },
       {
         "source": "@kie-tools/serverless-workflow-combined-editor",
@@ -679,10 +680,29 @@
       { "source": "@kie-tools/dmn-editor-envelope", "target": 
"@kie-tools-core/editor", "weight": 1 },
       { "source": "@kie-tools/dmn-editor-envelope", "target": 
"@kie-tools/dmn-editor", "weight": 1 },
       { "source": "@kie-tools/dmn-feel-antlr4-parser", "target": 
"@kie-tools/dmn-marshaller", "weight": 1 },
+      {
+        "source": "@kie-tools/dmn-marshaller",
+        "target": "@kie-tools/dmn-marshaller-backend-compatibility-tester",
+        "weight": 1
+      },
+      { "source": "@kie-tools/dmn-marshaller", "target": 
"@kie-tools/dmn-testing-models", "weight": 1 },
       { "source": "@kie-tools/dmn-marshaller", "target": 
"@kie-tools/xml-parser-ts-codegen", "weight": 1 },
+      {
+        "source": "@kie-tools/dmn-marshaller-backend-compatibility-tester",
+        "target": "@kie-tools/root-env",
+        "weight": 1
+      },
+      {
+        "source": "@kie-tools/dmn-marshaller-backend-compatibility-tester",
+        "target": "@kie-tools/tsconfig",
+        "weight": 1
+      },
+      { "source": "@kie-tools/dmn-testing-models", "target": 
"@kie-tools/maven-base", "weight": 1 },
       { "source": "@kie-tools-core/switch-expression-ts", "target": 
"@kie-tools/eslint", "weight": 1 },
       { "source": "@kie-tools-core/switch-expression-ts", "target": 
"@kie-tools/root-env", "weight": 1 },
       { "source": "@kie-tools-core/switch-expression-ts", "target": 
"@kie-tools/tsconfig", "weight": 1 },
+      { "source": "@kie-tools/maven-base", "target": 
"@kie-tools/maven-config-setup-helper", "weight": 1 },
+      { "source": "@kie-tools/maven-base", "target": "@kie-tools/root-env", 
"weight": 1 },
       { "source": "@kie-tools/dmn-runner", "target": 
"@kie-tools-core/react-hooks", "weight": 1 },
       { "source": "@kie-tools/dmn-runner", "target": 
"@kie-tools/extended-services-api", "weight": 1 },
       { "source": "@kie-tools/dmn-runner", "target": 
"@kie-tools/uniforms-patternfly", "weight": 1 },
@@ -727,8 +747,6 @@
         "target": "@kie-tools/runtime-tools-process-dev-ui-webapp",
         "weight": 1
       },
-      { "source": "@kie-tools/maven-base", "target": 
"@kie-tools/maven-config-setup-helper", "weight": 1 },
-      { "source": "@kie-tools/maven-base", "target": "@kie-tools/root-env", 
"weight": 1 },
       {
         "source": "@kie-tools/runtime-tools-process-dev-ui-webapp",
         "target": "@kie-tools/runtime-tools-process-webapp-components",
@@ -1100,7 +1118,6 @@
         "weight": 1
       },
       { "source": "swf-vscode-extension", "target": 
"@kie-tools/vscode-extension-common-test-helpers", "weight": 1 },
-      { "source": "@kie-tools/sonataflow-quarkus-devui", "target": 
"@kie-tools/maven-base", "weight": 1 },
       {
         "source": "@kie-tools/sonataflow-quarkus-devui",
         "target": "@kie-tools/serverless-workflow-dev-ui-webapp",
@@ -1191,7 +1208,9 @@
     ["@kie-tools/dmn-feel-antlr4-parser", "packages/dmn-feel-antlr4-parser"],
     ["@kie-tools/dmn-language-service", "packages/dmn-language-service"],
     ["@kie-tools/dmn-marshaller", "packages/dmn-marshaller"],
+    ["@kie-tools/dmn-marshaller-backend-compatibility-tester", 
"packages/dmn-marshaller-backend-compatibility-tester"],
     ["@kie-tools/dmn-runner", "packages/dmn-runner"],
+    ["@kie-tools/dmn-testing-models", "packages/dmn-testing-models"],
     ["dmn-vscode-extension", "packages/dmn-vscode-extension"],
     ["@kie-tools-core/editor", "packages/editor"],
     ["@kie-tools-core/envelope", "packages/envelope"],


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to