diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9cbd1fd887b00b37ae048163ead2fca38283258b..2baff079938f96259639fb564ac5de2962db0180 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -18,7 +18,7 @@
 -->
 
 
-## 3.6.0 (???)
+## 4.0.0 (???)
 
 ### 🔨 Internal / Developers
 - SonarQube integration
diff --git a/ExerciseChecker/package-lock.json b/ExerciseChecker/package-lock.json
index 6287b2da07a12860e6ed20b9eaedfc1f65f0f0f2..4a017327f01dfa66a8ac14ac15e50e6c2bbe945e 100644
--- a/ExerciseChecker/package-lock.json
+++ b/ExerciseChecker/package-lock.json
@@ -1,12 +1,12 @@
 {
     "name": "dojo_exercise_checker",
-    "version": "3.6.0",
+    "version": "4.0.0",
     "lockfileVersion": 3,
     "requires": true,
     "packages": {
         "": {
             "name": "dojo_exercise_checker",
-            "version": "3.6.0",
+            "version": "4.0.0",
             "license": "AGPLv3",
             "dependencies": {
                 "@gitbeaker/rest": "^40.0.1",
@@ -70,9 +70,9 @@
             }
         },
         "node_modules/@babel/helper-string-parser": {
-            "version": "7.23.4",
-            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
-            "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+            "version": "7.24.1",
+            "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz",
+            "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==",
             "dev": true,
             "engines": {
                 "node": ">=6.9.0"
@@ -256,11 +256,11 @@
             }
         },
         "node_modules/@gitbeaker/core": {
-            "version": "40.0.1",
-            "resolved": "https://registry.npmjs.org/@gitbeaker/core/-/core-40.0.1.tgz",
-            "integrity": "sha512-Zh2eVUgy2kYVnp7Db4gWoFqFbjgsnm2FvBEERbH3UM3cOA/iMqM+tw/of+Qk4yO+gv6tGZ9f4nF7+vK0tQFmDA==",
+            "version": "40.0.2",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/core/-/core-40.0.2.tgz",
+            "integrity": "sha512-rF2Wx4Ka1F2bo6iPdrp3yypprBHMP7VkReZXGYFohWrQX2CREZmq+2bXlY5rLdIv5pFvxZ91uLqKLiJtGFzoCQ==",
             "dependencies": {
-                "@gitbeaker/requester-utils": "^40.0.1",
+                "@gitbeaker/requester-utils": "^40.0.2",
                 "qs": "^6.11.2",
                 "xcase": "^2.0.1"
             },
@@ -269,9 +269,9 @@
             }
         },
         "node_modules/@gitbeaker/requester-utils": {
-            "version": "40.0.1",
-            "resolved": "https://registry.npmjs.org/@gitbeaker/requester-utils/-/requester-utils-40.0.1.tgz",
-            "integrity": "sha512-cn6fltKuQ3TbthoMTg+JsKQfozqGcRcz1jT9Nqzr4gpHWgjdQ/nr5JpjwzKABQNVL2JH3UJWr6Eji60CFZDZ6Q==",
+            "version": "40.0.2",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/requester-utils/-/requester-utils-40.0.2.tgz",
+            "integrity": "sha512-6T/ARwJ1UG+kuBCe18mgUeYdTXJJzUIO8y1taKWDLtYrJLzcS490k8BuIfeNahhdGjLDtTQ0o2eCMK1nfpgNYw==",
             "dependencies": {
                 "picomatch-browser": "^2.2.6",
                 "qs": "^6.11.2",
@@ -283,12 +283,12 @@
             }
         },
         "node_modules/@gitbeaker/rest": {
-            "version": "40.0.1",
-            "resolved": "https://registry.npmjs.org/@gitbeaker/rest/-/rest-40.0.1.tgz",
-            "integrity": "sha512-JEd9WNuzgur7gLiJPMWPYKaWe5uX1ic8CGKR1fMtBityFZ2xyZkTZ+LG0nqWTV1MyiowYnJ1swTh8Yff+kLsKA==",
+            "version": "40.0.2",
+            "resolved": "https://registry.npmjs.org/@gitbeaker/rest/-/rest-40.0.2.tgz",
+            "integrity": "sha512-CWpQ7kvrxzqL8mUR2KIciGQoHf4wCeGT6jM6ngDpzV/j4/ASIEqSnTV7YQAs+VbGu3ZCu7XM3l8Q5JVlMHQabQ==",
             "dependencies": {
-                "@gitbeaker/core": "^40.0.1",
-                "@gitbeaker/requester-utils": "^40.0.1"
+                "@gitbeaker/core": "^40.0.2",
+                "@gitbeaker/requester-utils": "^40.0.2"
             },
             "engines": {
                 "node": ">=18.0.0"
@@ -820,9 +820,9 @@
             }
         },
         "node_modules/@tsconfig/node10": {
-            "version": "1.0.9",
-            "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz",
-            "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==",
+            "version": "1.0.10",
+            "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.10.tgz",
+            "integrity": "sha512-PiaIWIoPvO6qm6t114ropMCagj6YAF24j9OkCA2mJDXFnlionEwhsBCJ8yek4aib575BI3OkART/90WsgHgLWw==",
             "dev": true
         },
         "node_modules/@tsconfig/node12": {
@@ -884,9 +884,9 @@
             }
         },
         "node_modules/@types/node": {
-            "version": "18.19.21",
-            "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.21.tgz",
-            "integrity": "sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw==",
+            "version": "18.19.26",
+            "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.26.tgz",
+            "integrity": "sha512-+wiMJsIwLOYCvUqSdKTrfkS8mpTp+MPINe6+Np4TAGFWWRWiBQ5kSq9nZGCSPkzx9mvT+uEukzpX4MOSCydcvw==",
             "dev": true,
             "dependencies": {
                 "undici-types": "~5.26.4"
@@ -1285,11 +1285,11 @@
             }
         },
         "node_modules/axios": {
-            "version": "1.6.7",
-            "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz",
-            "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==",
+            "version": "1.6.8",
+            "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz",
+            "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==",
             "dependencies": {
-                "follow-redirects": "^1.15.4",
+                "follow-redirects": "^1.15.6",
                 "form-data": "^4.0.0",
                 "proxy-from-env": "^1.1.0"
             }
@@ -1306,9 +1306,9 @@
             "dev": true
         },
         "node_modules/bare-events": {
-            "version": "2.2.1",
-            "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.1.tgz",
-            "integrity": "sha512-9GYPpsPFvrWBkelIhOhTWtkeZxVxZOdb3VnFTCzlOo3OjvmTvzLoZFUT8kNFACx0vJej6QPney1Cf9BvzCNE/A==",
+            "version": "2.2.2",
+            "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz",
+            "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==",
             "optional": true
         },
         "node_modules/base64-js": {
@@ -1782,9 +1782,9 @@
             }
         },
         "node_modules/detect-libc": {
-            "version": "2.0.2",
-            "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz",
-            "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==",
+            "version": "2.0.3",
+            "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz",
+            "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==",
             "dev": true,
             "engines": {
                 "node": ">=8"
@@ -2389,9 +2389,9 @@
             "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw=="
         },
         "node_modules/follow-redirects": {
-            "version": "1.15.5",
-            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz",
-            "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==",
+            "version": "1.15.6",
+            "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz",
+            "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==",
             "funding": [
                 {
                     "type": "individual",
@@ -2720,9 +2720,9 @@
             }
         },
         "node_modules/hasown": {
-            "version": "2.0.1",
-            "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.1.tgz",
-            "integrity": "sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==",
+            "version": "2.0.2",
+            "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
+            "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==",
             "dependencies": {
                 "function-bind": "^1.1.2"
             },
@@ -4603,9 +4603,9 @@
             }
         },
         "node_modules/ts-api-utils": {
-            "version": "1.2.1",
-            "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz",
-            "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==",
+            "version": "1.3.0",
+            "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
+            "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
             "dev": true,
             "engines": {
                 "node": ">=16"
@@ -4700,9 +4700,9 @@
             }
         },
         "node_modules/typescript": {
-            "version": "5.3.3",
-            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
-            "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
+            "version": "5.4.3",
+            "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz",
+            "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==",
             "dev": true,
             "bin": {
                 "tsc": "bin/tsc",
@@ -4798,9 +4798,9 @@
             }
         },
         "node_modules/winston": {
-            "version": "3.12.0",
-            "resolved": "https://registry.npmjs.org/winston/-/winston-3.12.0.tgz",
-            "integrity": "sha512-OwbxKaOlESDi01mC9rkM0dQqQt2I8DAUMRLZ/HpbwvDXm85IryEHgoogy5fziQy38PntgZsLlhAYHz//UPHZ5w==",
+            "version": "3.13.0",
+            "resolved": "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz",
+            "integrity": "sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==",
             "dependencies": {
                 "@colors/colors": "^1.6.0",
                 "@dabh/diagnostics": "^2.0.2",
@@ -4880,9 +4880,9 @@
             "dev": true
         },
         "node_modules/yaml": {
-            "version": "2.4.0",
-            "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.0.tgz",
-            "integrity": "sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==",
+            "version": "2.4.1",
+            "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz",
+            "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==",
             "bin": {
                 "yaml": "bin.mjs"
             },
diff --git a/ExerciseChecker/package.json b/ExerciseChecker/package.json
index 50acfa34b8aef04f608f9ac05921f53c5fdce558..33f73f819390c5d06e30f57504b632a9d2710670 100644
--- a/ExerciseChecker/package.json
+++ b/ExerciseChecker/package.json
@@ -1,7 +1,7 @@
 {
     "name"           : "dojo_exercise_checker",
     "description"    : "App that check an exercise of the Dojo project",
-    "version"        : "3.6.0",
+    "version"        : "4.0.0",
     "license"        : "AGPLv3",
     "author"         : "Michaël Minelli <dojo@minelli.me>",
     "main"           : "dist/app.js",