diff --git a/Dockerfile_ExerciceChecker b/Dockerfile_ExerciseChecker
similarity index 75%
rename from Dockerfile_ExerciceChecker
rename to Dockerfile_ExerciseChecker
index 4ce2e0829fdd0c046e653391b2c7fa818970106f..40006bde5fba704b11473a53982ace8db1040258 100644
--- a/Dockerfile_ExerciceChecker
+++ b/Dockerfile_ExerciseChecker
@@ -1,16 +1,16 @@
-ARG BUILD_WORKDIR=/dojo/ExerciceChecker
+ARG BUILD_WORKDIR=/dojo/ExerciseChecker
 
 
 
 ######################################################################## Build stage
 FROM node:18-alpine AS builder
 LABEL maintainer="Michaël Minelli <michael-jean.minelli@hesge.ch>"
-LABEL Description="Dojo exercice checker - Build stage"
+LABEL Description="Dojo exercise checker - Build stage"
 
 ARG BUILD_WORKDIR
 
 # Create app directory
-ADD ExerciceChecker/ ${BUILD_WORKDIR}/
+ADD ExerciseChecker/ ${BUILD_WORKDIR}/
 
 WORKDIR ${BUILD_WORKDIR}
 
@@ -29,11 +29,11 @@ RUN npx pkg . -t node18 --output ${BUILD_WORKDIR}/bin/app --public-packages "*"
 ######################################################################## Run stage
 FROM docker:latest
 LABEL maintainer="Michaël Minelli <michael-jean.minelli@hesge.ch>"
-LABEL Description="Dojo exercice checker - Container generation for usage in exercice pipelines"
+LABEL Description="Dojo exercise checker - Container generation for usage in exercise pipelines"
 
 RUN apk update
 RUN apk add git
 
 ARG BUILD_WORKDIR
 
-COPY --from=builder ${BUILD_WORKDIR}/bin/app /usr/local/bin/dojo_exercice_checker
\ No newline at end of file
+COPY --from=builder ${BUILD_WORKDIR}/bin/app /usr/local/bin/dojo_exercise_checker
\ No newline at end of file
diff --git a/ExerciceChecker/.idea/jetbrainsConfiguration b/ExerciceChecker/.idea/jetbrainsConfiguration
deleted file mode 160000
index 57997f6ff4ad2d2e23e03f86d997f64463cc898d..0000000000000000000000000000000000000000
--- a/ExerciceChecker/.idea/jetbrainsConfiguration
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 57997f6ff4ad2d2e23e03f86d997f64463cc898d
diff --git a/ExerciceChecker/src/shared b/ExerciceChecker/src/shared
deleted file mode 160000
index f33e4e0c7b34f9060e8995550920d25cd3e73c40..0000000000000000000000000000000000000000
--- a/ExerciceChecker/src/shared
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit f33e4e0c7b34f9060e8995550920d25cd3e73c40
diff --git a/ExerciceChecker/src/sharedByClients b/ExerciceChecker/src/sharedByClients
deleted file mode 160000
index 8872f91f280e60287c4dba46de58f3f412e0a462..0000000000000000000000000000000000000000
--- a/ExerciceChecker/src/sharedByClients
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 8872f91f280e60287c4dba46de58f3f412e0a462
diff --git a/ExerciceChecker/.idea/.gitignore b/ExerciseChecker/.idea/.gitignore
similarity index 100%
rename from ExerciceChecker/.idea/.gitignore
rename to ExerciseChecker/.idea/.gitignore
diff --git a/ExerciceChecker/.idea/ExerciceChecker.iml b/ExerciseChecker/.idea/ExerciseChecker.iml
similarity index 100%
rename from ExerciceChecker/.idea/ExerciceChecker.iml
rename to ExerciseChecker/.idea/ExerciseChecker.iml
diff --git a/ExerciceChecker/.idea/codeStyles b/ExerciseChecker/.idea/codeStyles
similarity index 100%
rename from ExerciceChecker/.idea/codeStyles
rename to ExerciseChecker/.idea/codeStyles
diff --git a/ExerciceChecker/.idea/inspectionProfiles b/ExerciseChecker/.idea/inspectionProfiles
similarity index 100%
rename from ExerciceChecker/.idea/inspectionProfiles
rename to ExerciseChecker/.idea/inspectionProfiles
diff --git a/ExerciceChecker/.idea/modules.xml b/ExerciseChecker/.idea/modules.xml
similarity index 55%
rename from ExerciceChecker/.idea/modules.xml
rename to ExerciseChecker/.idea/modules.xml
index c2239c4b72f1bfc1a4b6e7e41e943623e83bcd95..79d9443f6bedfe58da3f7fa8280f8dc00a97f716 100644
--- a/ExerciceChecker/.idea/modules.xml
+++ b/ExerciseChecker/.idea/modules.xml
@@ -2,7 +2,7 @@
 <project version="4">
   <component name="ProjectModuleManager">
     <modules>
-      <module fileurl="file://$PROJECT_DIR$/.idea/ExerciceChecker.iml" filepath="$PROJECT_DIR$/.idea/ExerciceChecker.iml" />
+      <module fileurl="file://$PROJECT_DIR$/.idea/ExerciseChecker.iml" filepath="$PROJECT_DIR$/.idea/ExerciseChecker.iml" />
     </modules>
   </component>
 </project>
\ No newline at end of file
diff --git a/ExerciceChecker/.idea/sqldialects.xml b/ExerciseChecker/.idea/sqldialects.xml
similarity index 100%
rename from ExerciceChecker/.idea/sqldialects.xml
rename to ExerciseChecker/.idea/sqldialects.xml
diff --git a/ExerciceChecker/.idea/vcs.xml b/ExerciseChecker/.idea/vcs.xml
similarity index 100%
rename from ExerciceChecker/.idea/vcs.xml
rename to ExerciseChecker/.idea/vcs.xml
diff --git a/ExerciceChecker/assets/docker-compose-override.yml b/ExerciseChecker/assets/docker-compose-override.yml
similarity index 100%
rename from ExerciceChecker/assets/docker-compose-override.yml
rename to ExerciseChecker/assets/docker-compose-override.yml
diff --git a/ExerciceChecker/package-lock.json b/ExerciseChecker/package-lock.json
similarity index 96%
rename from ExerciceChecker/package-lock.json
rename to ExerciseChecker/package-lock.json
index 4fecbd1dbdc00a8e1d429463c764e462a16c5da6..725bf8dd964e7214fe3397f3666ff17ba1aedfae 100644
--- a/ExerciceChecker/package-lock.json
+++ b/ExerciseChecker/package-lock.json
@@ -1,12 +1,12 @@
 {
-    "name": "dojo_exercice_checker",
-    "version": "1.0.0",
+    "name": "dojo_exercise_checker",
+    "version": "2.0.0",
     "lockfileVersion": 3,
     "requires": true,
     "packages": {
         "": {
-            "name": "dojo_exercice_checker",
-            "version": "1.0.0",
+            "name": "dojo_exercise_checker",
+            "version": "2.0.0",
             "dependencies": {
                 "ajv": "^8.12.0",
                 "axios": "^1.4.0",
@@ -60,9 +60,9 @@
             }
         },
         "node_modules/@babel/helper-validator-identifier": {
-            "version": "7.22.5",
-            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
-            "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
+            "version": "7.22.15",
+            "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.15.tgz",
+            "integrity": "sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==",
             "dev": true,
             "engines": {
                 "node": ">=6.9.0"
@@ -154,9 +154,9 @@
             }
         },
         "node_modules/@jridgewell/resolve-uri": {
-            "version": "3.1.0",
-            "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
-            "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+            "version": "3.1.1",
+            "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
+            "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
             "dev": true,
             "engines": {
                 "node": ">=6.0.0"
@@ -178,21 +178,15 @@
             "dev": true
         },
         "node_modules/@jridgewell/trace-mapping": {
-            "version": "0.3.18",
-            "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
-            "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
+            "version": "0.3.19",
+            "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
+            "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
             "dev": true,
             "dependencies": {
-                "@jridgewell/resolve-uri": "3.1.0",
-                "@jridgewell/sourcemap-codec": "1.4.14"
+                "@jridgewell/resolve-uri": "^3.1.0",
+                "@jridgewell/sourcemap-codec": "^1.4.14"
             }
         },
-        "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
-            "version": "1.4.14",
-            "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
-            "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
-            "dev": true
-        },
         "node_modules/@nodelib/fs.scandir": {
             "version": "2.1.5",
             "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -253,9 +247,9 @@
             "dev": true
         },
         "node_modules/@types/docker-modem": {
-            "version": "3.0.2",
-            "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.2.tgz",
-            "integrity": "sha512-qC7prjoEYR2QEe6SmCVfB1x3rfcQtUr1n4x89+3e0wSTMQ/KYCyf+/RAA9n2tllkkNc6//JMUZePdFRiGIWfaQ==",
+            "version": "3.0.3",
+            "resolved": "https://registry.npmjs.org/@types/docker-modem/-/docker-modem-3.0.3.tgz",
+            "integrity": "sha512-i1A2Etnav7uHizZ87vUf4EqwJehY3JOcTfBS0pGBlO+HQ0jg2lUMCaJRg9VQM8ldZkpYdIfsenxcTOCpwxPXEg==",
             "dev": true,
             "dependencies": {
                 "@types/node": "*",
@@ -298,9 +292,9 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "18.17.1",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.1.tgz",
-            "integrity": "sha512-xlR1jahfizdplZYRU59JlUx9uzF1ARa8jbhM11ccpCJya8kvos5jwdm2ZAgxSCwOl0fq21svP18EVwPBXMQudw==",
+            "version": "18.17.15",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.15.tgz",
+            "integrity": "sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==",
             "dev": true
         },
         "node_modules/@types/ssh2": {
@@ -313,18 +307,18 @@
             }
         },
         "node_modules/@types/tar-stream": {
-            "version": "2.2.2",
-            "resolved": "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-2.2.2.tgz",
-            "integrity": "sha512-1AX+Yt3icFuU6kxwmPakaiGrJUwG44MpuiqPg4dSolRFk6jmvs4b3IbUol9wKDLIgU76gevn3EwE8y/DkSJCZQ==",
+            "version": "2.2.3",
+            "resolved": "https://registry.npmjs.org/@types/tar-stream/-/tar-stream-2.2.3.tgz",
+            "integrity": "sha512-if3mugZfjVkXOMZdFjIHySxY13r6GXPpyOlsDmLffvyI7tLz9wXE8BFjNivXsvUeyJ1KNlOpfLnag+ISmxgxPw==",
             "dev": true,
             "dependencies": {
                 "@types/node": "*"
             }
         },
         "node_modules/@types/triple-beam": {
-            "version": "1.3.2",
-            "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz",
-            "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g=="
+            "version": "1.3.3",
+            "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.3.tgz",
+            "integrity": "sha512-6tOUG+nVHn0cJbVp25JFayS5UE6+xlbcNF9Lo9mU7U0zk3zeUShZied4YEQZjy1JBF043FSkdXw8YkUJuVtB5g=="
         },
         "node_modules/acorn": {
             "version": "8.10.0",
@@ -447,9 +441,9 @@
             }
         },
         "node_modules/axios": {
-            "version": "1.4.0",
-            "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz",
-            "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==",
+            "version": "1.5.0",
+            "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.0.tgz",
+            "integrity": "sha512-D4DdjDo5CY50Qms0qGQTTw6Q44jl7zRwY7bthds06pUGfChBCTcQs+N743eFWGEd6pRTMd6A+I87aWyFV5wiZQ==",
             "dependencies": {
                 "follow-redirects": "^1.15.0",
                 "form-data": "^4.0.0",
@@ -720,9 +714,9 @@
             "dev": true
         },
         "node_modules/cpu-features": {
-            "version": "0.0.8",
-            "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.8.tgz",
-            "integrity": "sha512-BbHBvtYhUhksqTjr6bhNOjGgMnhwhGTQmOoZGD+K7BCaQDCuZl/Ve1ZxUSMRwVC4D/rkCPQ2MAIeYzrWyK7eEg==",
+            "version": "0.0.9",
+            "resolved": "https://registry.npmjs.org/cpu-features/-/cpu-features-0.0.9.tgz",
+            "integrity": "sha512-AKjgn2rP2yJyfbepsmLfiYcmtNn/2eUvocUyM/09yB0YDiz39HteK/5/T4Onf0pmdYDMgkBoGvRLvEguzyL7wQ==",
             "hasInstallScript": true,
             "optional": true,
             "dependencies": {
@@ -855,32 +849,6 @@
                 "node": ">= 8.0"
             }
         },
-        "node_modules/dockerode/node_modules/tar-fs": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz",
-            "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==",
-            "dependencies": {
-                "chownr": "^1.1.1",
-                "mkdirp-classic": "^0.5.2",
-                "pump": "^3.0.0",
-                "tar-stream": "^2.0.0"
-            }
-        },
-        "node_modules/dockerode/node_modules/tar-stream": {
-            "version": "2.2.0",
-            "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
-            "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
-            "dependencies": {
-                "bl": "^4.0.3",
-                "end-of-stream": "^1.4.1",
-                "fs-constants": "^1.0.0",
-                "inherits": "^2.0.3",
-                "readable-stream": "^3.1.1"
-            },
-            "engines": {
-                "node": ">=6"
-            }
-        },
         "node_modules/dotenv": {
             "version": "16.3.1",
             "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz",
@@ -934,9 +902,9 @@
             "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
         },
         "node_modules/fast-fifo": {
-            "version": "1.3.0",
-            "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.0.tgz",
-            "integrity": "sha512-IgfweLvEpwyA4WgiQe9Nx6VV2QkML2NkvZnk1oKnIzXgXdWxuhF7zw4DvLTPZJn6PIUneiAXPF24QmoEqHTjyw=="
+            "version": "1.3.2",
+            "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz",
+            "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ=="
         },
         "node_modules/fast-glob": {
             "version": "3.3.1",
@@ -1512,9 +1480,9 @@
             }
         },
         "node_modules/nan": {
-            "version": "2.17.0",
-            "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz",
-            "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==",
+            "version": "2.18.0",
+            "resolved": "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz",
+            "integrity": "sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w==",
             "optional": true
         },
         "node_modules/napi-build-utils": {
@@ -1524,9 +1492,9 @@
             "dev": true
         },
         "node_modules/node-abi": {
-            "version": "3.45.0",
-            "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.45.0.tgz",
-            "integrity": "sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ==",
+            "version": "3.47.0",
+            "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz",
+            "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==",
             "dev": true,
             "dependencies": {
                 "semver": "^7.3.5"
@@ -1536,9 +1504,9 @@
             }
         },
         "node_modules/node-fetch": {
-            "version": "2.6.12",
-            "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.12.tgz",
-            "integrity": "sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==",
+            "version": "2.7.0",
+            "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz",
+            "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==",
             "dev": true,
             "dependencies": {
                 "whatwg-url": "^5.0.0"
@@ -1710,6 +1678,34 @@
                 "node": ">=10"
             }
         },
+        "node_modules/pkg-fetch/node_modules/tar-fs": {
+            "version": "2.1.1",
+            "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
+            "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
+            "dev": true,
+            "dependencies": {
+                "chownr": "^1.1.1",
+                "mkdirp-classic": "^0.5.2",
+                "pump": "^3.0.0",
+                "tar-stream": "^2.1.4"
+            }
+        },
+        "node_modules/pkg-fetch/node_modules/tar-stream": {
+            "version": "2.2.0",
+            "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
+            "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
+            "dev": true,
+            "dependencies": {
+                "bl": "^4.0.3",
+                "end-of-stream": "^1.4.1",
+                "fs-constants": "^1.0.0",
+                "inherits": "^2.0.3",
+                "readable-stream": "^3.1.1"
+            },
+            "engines": {
+                "node": ">=6"
+            }
+        },
         "node_modules/pkg/node_modules/fs-extra": {
             "version": "9.1.0",
             "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz",
@@ -1859,12 +1855,12 @@
             }
         },
         "node_modules/resolve": {
-            "version": "1.22.2",
-            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
-            "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+            "version": "1.22.4",
+            "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.4.tgz",
+            "integrity": "sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==",
             "dev": true,
             "dependencies": {
-                "is-core-module": "^2.11.0",
+                "is-core-module": "^2.13.0",
                 "path-parse": "^1.0.7",
                 "supports-preserve-symlinks-flag": "^1.0.0"
             },
@@ -1876,9 +1872,9 @@
             }
         },
         "node_modules/resolve/node_modules/is-core-module": {
-            "version": "2.12.1",
-            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
-            "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+            "version": "2.13.0",
+            "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
+            "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
             "dev": true,
             "dependencies": {
                 "has": "^1.0.3"
@@ -2189,22 +2185,20 @@
             }
         },
         "node_modules/tar-fs": {
-            "version": "2.1.1",
-            "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz",
-            "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==",
-            "dev": true,
+            "version": "2.0.1",
+            "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz",
+            "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==",
             "dependencies": {
                 "chownr": "^1.1.1",
                 "mkdirp-classic": "^0.5.2",
                 "pump": "^3.0.0",
-                "tar-stream": "^2.1.4"
+                "tar-stream": "^2.0.0"
             }
         },
         "node_modules/tar-fs/node_modules/tar-stream": {
             "version": "2.2.0",
             "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz",
             "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==",
-            "dev": true,
             "dependencies": {
                 "bl": "^4.0.3",
                 "end-of-stream": "^1.4.1",
@@ -2344,9 +2338,9 @@
             }
         },
         "node_modules/typescript": {
-            "version": "5.1.6",
-            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz",
-            "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==",
+            "version": "5.2.2",
+            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
+            "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
             "dev": true,
             "bin": {
                 "tsc": "bin/tsc",
diff --git a/ExerciceChecker/package.json b/ExerciseChecker/package.json
similarity index 94%
rename from ExerciceChecker/package.json
rename to ExerciseChecker/package.json
index eba11f3d5f39cc55ce6552b44077701aab30d4bb..b20cb75990145c0e729d98e2ff30ebfd058186f3 100644
--- a/ExerciceChecker/package.json
+++ b/ExerciseChecker/package.json
@@ -1,6 +1,6 @@
 {
-    "name"           : "dojo_exercice_checker",
-    "version"        : "1.0.1",
+    "name"           : "dojo_exercise_checker",
+    "version"        : "2.0.0",
     "main"           : "dist/app.js",
     "bin"            : {
         "dirmanager": "./dist/app.js"
diff --git a/ExerciceChecker/src/app.ts b/ExerciseChecker/src/app.ts
similarity index 68%
rename from ExerciceChecker/src/app.ts
rename to ExerciseChecker/src/app.ts
index c40fc2ea6c6faa5437456377c6821b548154dcda..a8201d867d1d725301dcbead4437fa4a4dcdae6b 100644
--- a/ExerciceChecker/src/app.ts
+++ b/ExerciseChecker/src/app.ts
@@ -9,7 +9,7 @@ import Styles                      from './types/Style';
 import Icon                        from './sharedByClients/types/Icon';
 import RecursiveFilesStats         from './shared/helpers/recursiveFilesStats/RecursiveFilesStats';
 import Toolbox                     from './shared/helpers/Toolbox';
-import ExerciceCheckerError        from './shared/types/Dojo/ExerciceCheckerError';
+import ExerciseCheckerError        from './shared/types/Dojo/ExerciseCheckerError';
 import { exec }                    from 'child_process';
 import util                        from 'util';
 import fs                          from 'fs-extra';
@@ -17,10 +17,10 @@ import HttpManager                 from './managers/HttpManager';
 import DojoBackendManager          from './managers/DojoBackendManager';
 import Config                      from './config/Config';
 import ArchiveHelper               from './shared/helpers/ArchiveHelper';
-import ExerciceDockerCompose       from './sharedByClients/helpers/Dojo/ExerciceDockerCompose';
-import ExerciceResultsValidation   from './sharedByClients/helpers/Dojo/ExerciceResultsValidation';
-import ExerciceEnonce              from './sharedByClients/models/ExerciceEnonce';
-import ClientsSharedExerciceHelper from './sharedByClients/helpers/Dojo/ClientsSharedExerciceHelper';
+import ExerciseDockerCompose       from './sharedByClients/helpers/Dojo/ExerciseDockerCompose';
+import ExerciseResultsValidation   from './sharedByClients/helpers/Dojo/ExerciseResultsValidation';
+import ExerciseAssignment          from './sharedByClients/models/ExerciseAssignment';
+import ClientsSharedExerciseHelper from './sharedByClients/helpers/Dojo/ClientsSharedExerciseHelper';
 
 
 (async () => {
@@ -30,24 +30,24 @@ import ClientsSharedExerciceHelper from './sharedByClients/helpers/Dojo/ClientsS
 
     console.log(Styles.APP_NAME(Config.appName));
 
-    let exerciceEnonce: ExerciceEnonce | undefined;
-    let exerciceDockerCompose: ExerciceDockerCompose;
-    let exerciceResultsValidation: ExerciceResultsValidation;
+    let exerciseAssignment: ExerciseAssignment | undefined;
+    let exerciseDockerCompose: ExerciseDockerCompose;
+    let exerciseResultsValidation: ExerciseResultsValidation;
 
     /*
      //////////////////////////////////////////////////////////////////////////////////////////////////////////// Step 1:
-     -   Read the dojo enonce file from the enonce repository
+     -   Read the dojo assignment file from the assignment repository
      -   Download immutables files (maybe throw or show an error if the files have been modified ?)
      */
     {
-        console.log(Styles.INFO(`${ Icon.INFO }️ Checking the exercice's enonce and his immutable files`));
-        exerciceEnonce = await DojoBackendManager.getExerciceEnonce();
-        if ( !exerciceEnonce ) {
-            console.error(Styles.ERROR(`${ Icon.ERROR } Error while getting the exercice's enonce`));
-            process.exit(ExerciceCheckerError.EXERCICE_ENONCE_GET_ERROR);
+        console.log(Styles.INFO(`${ Icon.INFO }️ Checking the exercise's assignment and his immutable files`));
+        exerciseAssignment = await DojoBackendManager.getExerciseAssignment();
+        if ( !exerciseAssignment ) {
+            console.error(Styles.ERROR(`${ Icon.ERROR } Error while getting the exercise's assignment`));
+            process.exit(ExerciseCheckerError.EXERCISE_ASSIGNMENT_GET_ERROR);
         }
 
-        exerciceEnonce.immutable.forEach(immutableFile => {
+        exerciseAssignment.immutable.forEach(immutableFile => {
             const filePath = path.join(Config.folders.project, immutableFile.file_path);
             fs.mkdirSync(path.dirname(filePath), { recursive: true });
             fs.writeFileSync(filePath, immutableFile.content, { encoding: 'base64' });
@@ -64,58 +64,58 @@ import ClientsSharedExerciceHelper from './sharedByClients/helpers/Dojo/ClientsS
     {
         const composeOverridePath: string = path.join(Config.folders.project, 'docker-compose-override.yml');
 
-        const composeOverride = fs.readFileSync(path.join(__dirname, '../assets/docker-compose-override.yml'), 'utf8').replace('{{VOLUME_NAME}}', exerciceEnonce.enonceFile.result.volume).replace('{{MOUNT_PATH}}', Config.folders.resultsExercice);
+        const composeOverride = fs.readFileSync(path.join(__dirname, '../assets/docker-compose-override.yml'), 'utf8').replace('{{VOLUME_NAME}}', exerciseAssignment.assignmentFile.result.volume).replace('{{MOUNT_PATH}}', Config.folders.resultsExercise);
         fs.writeFileSync(composeOverridePath, composeOverride);
 
-        exerciceDockerCompose = new ExerciceDockerCompose(ClientsSharedConfig.dockerCompose.projectName, exerciceEnonce.enonceFile, Config.folders.project, [ composeOverridePath ]);
+        exerciseDockerCompose = new ExerciseDockerCompose(ClientsSharedConfig.dockerCompose.projectName, exerciseAssignment.assignmentFile, Config.folders.project, [ composeOverridePath ]);
 
         try {
             await new Promise<void>((resolve, reject) => {
-                exerciceDockerCompose.events.on('step', (name: string, message: string) => {
+                exerciseDockerCompose.events.on('step', (name: string, message: string) => {
                     console.log(Styles.INFO(`${ Icon.INFO } ${ message }`));
                 });
 
-                exerciceDockerCompose.events.on('endStep', (stepName: string, message: string, error: boolean) => {
+                exerciseDockerCompose.events.on('endStep', (stepName: string, message: string, error: boolean) => {
                     if ( error ) {
                         console.error(Styles.ERROR(`${ Icon.ERROR } ${ message }`));
                     }
                 });
 
-                exerciceDockerCompose.events.on('finished', (success: boolean, exitCode: number) => {
+                exerciseDockerCompose.events.on('finished', (success: boolean, exitCode: number) => {
                     success ? resolve() : reject();
                 });
 
-                exerciceDockerCompose.run();
+                exerciseDockerCompose.run();
             });
         } catch ( error ) { }
 
         fs.rmSync(composeOverridePath);
-        fs.writeFileSync(path.join(Config.folders.resultsDojo, 'dockerComposeLogs.txt'), exerciceDockerCompose.allLogs);
+        fs.writeFileSync(path.join(Config.folders.resultsDojo, 'dockerComposeLogs.txt'), exerciseDockerCompose.allLogs);
 
-        if ( !exerciceDockerCompose.success ) {
+        if ( !exerciseDockerCompose.success ) {
             console.error(Styles.ERROR(`${ Icon.ERROR } Execution logs are available in artifacts`));
-            process.exit(exerciceDockerCompose.exitCode);
+            process.exit(exerciseDockerCompose.exitCode);
         }
     }
 
 
     //////////////////////////////////////////////////////////////////////////////////////////////////////////// Step 3: Check content requirements and content size
     {
-        exerciceResultsValidation = new ExerciceResultsValidation(Config.folders.resultsDojo, Config.folders.resultsExercice);
+        exerciseResultsValidation = new ExerciseResultsValidation(Config.folders.resultsDojo, Config.folders.resultsExercise);
 
         try {
             await new Promise<void>((resolve) => {
-                exerciceResultsValidation.events.on('step', (name: string, message: string) => {
+                exerciseResultsValidation.events.on('step', (name: string, message: string) => {
                     console.log(Styles.INFO(`${ Icon.INFO } ${ message }`));
                 });
 
-                exerciceResultsValidation.events.on('endStep', (stepName: string, message: string, error: boolean) => {
+                exerciseResultsValidation.events.on('endStep', (stepName: string, message: string, error: boolean) => {
                     if ( error ) {
                         console.error(Styles.ERROR(`${ Icon.ERROR } ${ message }`));
                     }
                 });
 
-                exerciceResultsValidation.events.on('finished', (success: boolean, exitCode: number) => {
+                exerciseResultsValidation.events.on('finished', (success: boolean, exitCode: number) => {
                     if ( !success ) {
                         process.exit(exitCode);
                     }
@@ -123,7 +123,7 @@ import ClientsSharedExerciceHelper from './sharedByClients/helpers/Dojo/ClientsS
                     resolve();
                 });
 
-                exerciceResultsValidation.run();
+                exerciseResultsValidation.run();
             });
         } catch ( error ) { }
     }
@@ -143,11 +143,11 @@ import ClientsSharedExerciceHelper from './sharedByClients/helpers/Dojo/ClientsS
                 liteStats               : true
             });
 
-            await DojoBackendManager.sendResults(exerciceDockerCompose.exitCode, commit, exerciceResultsValidation.exerciceResults!, files, await ArchiveHelper.getBase64(Config.folders.resultsVolume));
+            await DojoBackendManager.sendResults(exerciseDockerCompose.exitCode, commit, exerciseResultsValidation.exerciseResults!, files, await ArchiveHelper.getBase64(Config.folders.resultsVolume));
         } catch ( error ) {
             console.error(Styles.ERROR(`${ Icon.ERROR } Error while uploading the results`));
             console.error(JSON.stringify(error));
-            process.exit(ExerciceCheckerError.UPLOAD);
+            process.exit(ExerciseCheckerError.UPLOAD);
         }
     }
 
@@ -158,8 +158,8 @@ import ClientsSharedExerciceHelper from './sharedByClients/helpers/Dojo/ClientsS
      - Exit with container exit code
      */
     {
-        ClientsSharedExerciceHelper.displayExecutionResults(exerciceResultsValidation.exerciceResults!, exerciceDockerCompose.exitCode, Styles, `\n\n${ Icon.INFO }️ More detailed logs and resources may be available in artifacts`);
+        ClientsSharedExerciseHelper.displayExecutionResults(exerciseResultsValidation.exerciseResults!, exerciseDockerCompose.exitCode, Styles, `\n\n${ Icon.INFO }️ More detailed logs and resources may be available in artifacts`);
 
-        process.exit(exerciceDockerCompose.exitCode);
+        process.exit(exerciseDockerCompose.exitCode);
     }
 })();
\ No newline at end of file
diff --git a/ExerciceChecker/src/config/Config.ts b/ExerciseChecker/src/config/Config.ts
similarity index 64%
rename from ExerciceChecker/src/config/Config.ts
rename to ExerciseChecker/src/config/Config.ts
index 5d7d609c432d1574fb879903c9b735e21b07074e..9072ff8f963c7dd4cd392cd07ff6e3397caa6ce8 100644
--- a/ExerciceChecker/src/config/Config.ts
+++ b/ExerciseChecker/src/config/Config.ts
@@ -6,10 +6,10 @@ class Config {
     public readonly appName: string;
 
     public readonly folders: {
-        project: string; resultsVolume: string; resultsDojo: string; resultsExercice: string;
+        project: string; resultsVolume: string; resultsDojo: string; resultsExercise: string;
     };
 
-    public readonly exercice: {
+    public readonly exercise: {
         id: string; secret: string;
     };
 
@@ -18,14 +18,14 @@ class Config {
 
         this.folders = {
             project        : process.env.PROJECT_FOLDER?.convertWithEnvVars() ?? './',
-            resultsVolume  : process.env.EXERCICE_RESULTS_VOLUME?.convertWithEnvVars() ?? '',
-            resultsDojo    : path.join(process.env.EXERCICE_RESULTS_VOLUME?.convertWithEnvVars() ?? '', 'Dojo/'),
-            resultsExercice: path.join(process.env.EXERCICE_RESULTS_VOLUME?.convertWithEnvVars() ?? '', 'Exercice/')
+            resultsVolume  : process.env.EXERCISE_RESULTS_VOLUME?.convertWithEnvVars() ?? '',
+            resultsDojo    : path.join(process.env.EXERCISE_RESULTS_VOLUME?.convertWithEnvVars() ?? '', 'Dojo/'),
+            resultsExercise: path.join(process.env.EXERCISE_RESULTS_VOLUME?.convertWithEnvVars() ?? '', 'Exercise/')
         };
         this.resetResultsVolume();
 
-        this.exercice = {
-            id    : process.env.DOJO_EXERCICE_ID || '',
+        this.exercise = {
+            id    : process.env.DOJO_EXERCISE_ID || '',
             secret: process.env.DOJO_SECRET || ''
         };
     }
@@ -33,7 +33,7 @@ class Config {
     private resetResultsVolume(): void {
         fs.emptyDirSync(this.folders.resultsVolume);
         fs.emptyDirSync(this.folders.resultsDojo);
-        fs.emptyDirSync(this.folders.resultsExercice);
+        fs.emptyDirSync(this.folders.resultsExercise);
     }
 }
 
diff --git a/ExerciceChecker/src/managers/DojoBackendManager.ts b/ExerciseChecker/src/managers/DojoBackendManager.ts
similarity index 59%
rename from ExerciceChecker/src/managers/DojoBackendManager.ts
rename to ExerciseChecker/src/managers/DojoBackendManager.ts
index 27df41e9a2f3d47ea2a262ba3c96b67ce9fba2d1..0799a3c8fe09cc874939d93818f345fe3779e1fb 100644
--- a/ExerciceChecker/src/managers/DojoBackendManager.ts
+++ b/ExerciseChecker/src/managers/DojoBackendManager.ts
@@ -1,9 +1,9 @@
 import ClientsSharedConfig from '../sharedByClients/config/ClientsSharedConfig';
 import axios               from 'axios';
-import DojoResponse        from '../shared/types/Dojo/DojoResponse';
-import ExerciceEnonce      from '../sharedByClients/models/ExerciceEnonce';
+import DojoBackendResponse from '../shared/types/Dojo/DojoBackendResponse';
+import ExerciseAssignment  from '../sharedByClients/models/ExerciseAssignment';
 import Config              from '../config/Config';
-import ExerciceResultsFile from '../shared/types/Dojo/ExerciceResultsFile';
+import ExerciseResultsFile from '../shared/types/Dojo/ExerciseResultsFile';
 import ApiRoute            from '../sharedByClients/types/Dojo/ApiRoute';
 
 
@@ -12,17 +12,17 @@ class DojoBackendManager {
         return `${ ClientsSharedConfig.apiURL }${ route }`;
     }
 
-    public async getExerciceEnonce(): Promise<ExerciceEnonce | undefined> {
+    public async getExerciseAssignment(): Promise<ExerciseAssignment | undefined> {
         try {
-            return (await axios.get<DojoResponse<ExerciceEnonce>>(this.getApiUrl(ApiRoute.EXERCICE_ENONCE).replace('{{id}}', Config.exercice.id))).data.data;
+            return (await axios.get<DojoBackendResponse<ExerciseAssignment>>(this.getApiUrl(ApiRoute.EXERCISE_ASSIGNMENT).replace('{{id}}', Config.exercise.id))).data.data;
         } catch ( error ) {
             return undefined;
         }
     }
 
-    public async sendResults(exitCode: number, commit: any, results: ExerciceResultsFile, files: any, archiveBase64: string): Promise<void> {
+    public async sendResults(exitCode: number, commit: any, results: ExerciseResultsFile, files: any, archiveBase64: string): Promise<void> {
         try {
-            await axios.post(this.getApiUrl(ApiRoute.EXERCICE_RESULTS).replace('{{id}}', Config.exercice.id), {
+            await axios.post(this.getApiUrl(ApiRoute.EXERCISE_RESULTS).replace('{{id}}', Config.exercise.id), {
                 exitCode     : exitCode,
                 commit       : JSON.stringify(commit),
                 results      : JSON.stringify(results),
diff --git a/ExerciceChecker/src/managers/HttpManager.ts b/ExerciseChecker/src/managers/HttpManager.ts
similarity index 93%
rename from ExerciceChecker/src/managers/HttpManager.ts
rename to ExerciseChecker/src/managers/HttpManager.ts
index 432e456dd35231502321f8f4d11b410f3dc1f0ef..fb113963ab8d37459ff72bf05d33827598889edd 100644
--- a/ExerciceChecker/src/managers/HttpManager.ts
+++ b/ExerciseChecker/src/managers/HttpManager.ts
@@ -25,7 +25,7 @@ class HttpManager {
                     config.headers['Content-Type'] = 'multipart/form-data';
                 }
 
-                config.headers.Authorization = `ExerciceSecret ${ Config.exercice.secret }`;
+                config.headers.Authorization = `ExerciseSecret ${ Config.exercise.secret }`;
             }
 
             return config;
diff --git a/ExerciceChecker/src/types/Style.ts b/ExerciseChecker/src/types/Style.ts
similarity index 100%
rename from ExerciceChecker/src/types/Style.ts
rename to ExerciseChecker/src/types/Style.ts
diff --git a/ExerciceChecker/tsconfig.json b/ExerciseChecker/tsconfig.json
similarity index 100%
rename from ExerciceChecker/tsconfig.json
rename to ExerciseChecker/tsconfig.json