diff --git a/tests/convert/basic/task.json b/tests/convert/basic/task.json
index 6e643a5..2fb6ac3 100644
--- a/tests/convert/basic/task.json
+++ b/tests/convert/basic/task.json
@@ -63,7 +63,7 @@
                                     "-repoSize=50.5",
                                     "-meta=README.md",
                                     "-meta=Changelog.md",
-                                    "-checkFileSumList=a7bda693bf603a20b0ecf1bcdae62c7268596313e7efffcbc8a6fe393e3397b6,b1bbad25b830db0a77b15a033f9ca1b7ab44c1d2d05056412bd3e4421645f0bf,5906153391235cc9ed094402f2c5e42d98cf3073b0a8a1f3a4af354bdfc0c9a1,064c4ed06789f31bab546f36e2d40be547b92a6e1f647f7002fdea3a2b76ad98",
+                                    "-checkFileSumList=a5b63323a692d3d8b952442969649b4f823d58dae26429494f613df160710dfc,b1bbad25b830db0a77b15a033f9ca1b7ab44c1d2d05056412bd3e4421645f0bf,f6740081487ca34963a005209e2e9adfdf6f3561719af082d40fe80145e0cceb,bbeca1491c2f8364821a328a6677c0c5d59ccd60250abac3cec0887eeb9bde3e",
                                     "-checkFileNameList=.gitignore,.gitattributes,.gitea/workflows/push.yaml,.gitea/workflows/release.yaml"
                                 ],
                                 "env": [
@@ -153,7 +153,7 @@
                             "cpuSetLimit": "",
                             "copyIn": {
                                 "tools/compile": {
-                                    "src": "/home/tt/.config/joj/tools/tools/compile",
+                                    "src": "/home/tt/./tools/tools/compile",
                                     "max": 419430400
                                 }
                             },
@@ -243,7 +243,7 @@
                             "cpuSetLimit": "",
                             "copyIn": {
                                 "tools/filelength": {
-                                    "src": "/home/tt/.config/joj/tools/tools/filelength",
+                                    "src": "/home/tt/./tools/tools/filelength",
                                     "max": 419430400
                                 }
                             },
@@ -352,7 +352,7 @@
                             "cpuSetLimit": "",
                             "copyIn": {
                                 "tests/homework/h7/.clang-tidy": {
-                                    "src": "/home/tt/.config/joj/tools/tests/homework/h7/.clang-tidy",
+                                    "src": "/home/tt/./tools/tests/homework/h7/.clang-tidy",
                                     "max": 419430400
                                 }
                             },
@@ -719,7 +719,7 @@
                                     "PATH=/usr/bin:/bin:/usr/local/bin"
                                 ],
                                 "stdin": {
-                                    "src": "/home/tt/.config/joj/homework/h7/e2/case0.in",
+                                    "src": "/home/tt/./homework/h7/e2/case0.in",
                                     "max": 419430400
                                 },
                                 "cpuLimit": 1000000000,
@@ -736,7 +736,7 @@
                                     "PATH=/usr/bin:/bin:/usr/local/bin"
                                 ],
                                 "stdin": {
-                                    "src": "/home/tt/.config/joj/homework/h7/e2/case1.in",
+                                    "src": "/home/tt/./homework/h7/e2/case1.in",
                                     "max": 419430400
                                 },
                                 "cpuLimit": 1000000000,
@@ -762,7 +762,7 @@
                                         {
                                             "score": 5,
                                             "fileName": "stdout",
-                                            "answerPath": "/home/tt/.config/joj/homework/h7/e2/case0.out",
+                                            "answerPath": "/home/tt/./homework/h7/e2/case0.out",
                                             "forceQuitOnDiff": false,
                                             "alwaysHide": false,
                                             "compareSpace": false
@@ -774,7 +774,7 @@
                                         {
                                             "score": 5,
                                             "fileName": "stdout",
-                                            "answerPath": "/home/tt/.config/joj/homework/h7/e2/case1.out",
+                                            "answerPath": "/home/tt/./homework/h7/e2/case1.out",
                                             "forceQuitOnDiff": false,
                                             "alwaysHide": false,
                                             "compareSpace": false
diff --git a/tests/convert/clang-tidy/task.json b/tests/convert/clang-tidy/task.json
new file mode 100644
index 0000000..2fb6ac3
--- /dev/null
+++ b/tests/convert/clang-tidy/task.json
@@ -0,0 +1,872 @@
+{
+    "name": "hw7 ex2",
+    "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log",
+    "expireUnixTimestamp": 1735574399,
+    "effectiveUnixTimestamp": -1,
+    "actorCsvPath": "/home/tt/.config/joj/students.csv",
+    "maxTotalScore": 100,
+    "stage": {
+        "sandboxExecServer": "172.17.0.1:5051",
+        "sandboxToken": "test",
+        "outputPath": "/tmp/joj3_result.json",
+        "stages": [
+            {
+                "name": "healthcheck",
+                "group": "",
+                "executor": {
+                    "name": "local",
+                    "with": {
+                        "default": {
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 4096
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 4096
+                            },
+                            "cpuLimit": 4000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 8000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": [
+                            {
+                                "args": [
+                                    "/usr/local/bin/repo-health-checker",
+                                    "-root=.",
+                                    "-repoSize=50.5",
+                                    "-meta=README.md",
+                                    "-meta=Changelog.md",
+                                    "-checkFileSumList=a5b63323a692d3d8b952442969649b4f823d58dae26429494f613df160710dfc,b1bbad25b830db0a77b15a033f9ca1b7ab44c1d2d05056412bd3e4421645f0bf,f6740081487ca34963a005209e2e9adfdf6f3561719af082d40fe80145e0cceb,bbeca1491c2f8364821a328a6677c0c5d59ccd60250abac3cec0887eeb9bde3e",
+                                    "-checkFileNameList=.gitignore,.gitattributes,.gitea/workflows/push.yaml,.gitea/workflows/release.yaml"
+                                ],
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "cpuLimit": 4000000000000,
+                                "clockLimit": 8000000000000,
+                                "memoryLimit": 838860800,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            },
+                            {
+                                "args": [
+                                    "/usr/local/bin/joint-teapot",
+                                    "joj3-check-env",
+                                    "/home/tt/.config/teapot/teapot.env",
+                                    "--grading-repo-name",
+                                    "Nuvole-joj",
+                                    "--group-config",
+                                    "joj=1000:24,run=1000:24,=100:24"
+                                ],
+                                "env": [
+                                    "LOG_FILE_PATH=/home/nuvole0217/.cache/joint-teapot-debug.log"
+                                ],
+                                "cpuLimit": 4000000000000,
+                                "clockLimit": 8000000000000,
+                                "memoryLimit": 838860800,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            }
+                        ]
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "healthcheck",
+                        "with": {
+                            "score": 1
+                        }
+                    },
+                    {
+                        "name": "debug",
+                        "with": {
+                            "score": 0
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "Compilation",
+                "group": "",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./tools/compile"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tools/compile": {
+                                    "src": "/home/tt/./tools/tools/compile",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [
+                                "h7/build/ex2",
+                                "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json"
+                            ],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    },
+                    {
+                        "name": "result-status",
+                        "with": {
+                            "score": 0,
+                            "comment": "Congratulations! Your code compiled successfully.",
+                            "forceQuitOnNotAccepted": true
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Filelength",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./tools/filelength",
+                                "400",
+                                "300",
+                                "*.cpp",
+                                "*.h"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tools/filelength": {
+                                    "src": "/home/tt/./tools/tools/filelength",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "keyword",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "recommended"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "max"
+                                    ],
+                                    "score": 20
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stdout"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Clang-tidy",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "run-clang-tidy-18",
+                                "-header-filter=.*",
+                                "-quiet",
+                                "-load=/usr/local/lib/libcodequality.so",
+                                "-p",
+                                "h7/build",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 65000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tests/homework/h7/.clang-tidy": {
+                                    "src": "/home/tt/./tools/tests/homework/h7/.clang-tidy",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "clangtidy",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "readability-function-size"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "codequality-no-global-variables",
+                                        "codequality-no-header-guard",
+                                        "codequality-no-fflush-stdin"
+                                    ],
+                                    "score": 20
+                                },
+                                {
+                                    "keywords": [
+                                        "codequality-unchecked-malloc-result",
+                                        "readability-duplicate-include",
+                                        "readability-identifier-naming",
+                                        "readability-redundant",
+                                        "readability-misplaced-array-index",
+                                        "cppcoreguidelines-init-variables",
+                                        "bugprone-suspicious-string-compare",
+                                        "google-global-names-in-headers",
+                                        "clang-diagnostic",
+                                        "clang-analyzer",
+                                        "misc",
+                                        "performance",
+                                        "portability"
+                                    ],
+                                    "score": 5
+                                },
+                                {
+                                    "keywords": [
+                                        "readability-misleading-indentation"
+                                    ],
+                                    "score": 15
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stdout"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Cppcheck",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "cppcheck",
+                                "--template={\"file\":\"{file}\",\"line\":{line}, \"column\":{column}, \"severity\":\"{severity}\", \"message\":\"{message}\", \"id\":\"{id}\"}",
+                                "--force",
+                                "--enable=all",
+                                "--suppress=missingIncludeSystem",
+                                "--quiet",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 65000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "cppcheck",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "warning",
+                                        "portability",
+                                        "performance",
+                                        "style"
+                                    ],
+                                    "score": 5
+                                },
+                                {
+                                    "keywords": [
+                                        "error"
+                                    ],
+                                    "score": 15
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Cpplint",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "cpplint",
+                                "--linelength=120",
+                                "--filter=-legal,-readability/casting,-whitespace,-runtime/printf,-runtime/threadsafe_fn,-runtime/int,-readability/todo,-build/include_subdir,-build/header_guard,-build/include_what_you_use",
+                                "--recursive",
+                                "--exclude=build",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 65000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "cpplint",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "build"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "readability"
+                                    ],
+                                    "score": 20
+                                },
+                                {
+                                    "keywords": [
+                                        "runtime"
+                                    ],
+                                    "score": 5
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[joj] ex2-asan",
+                "group": "joj",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./h7/build/ex2-asan",
+                                "-a"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 95656304705536,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": [
+                            {
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "stdin": {
+                                    "src": "/home/tt/./homework/h7/e2/case0.in",
+                                    "max": 419430400
+                                },
+                                "cpuLimit": 1000000000,
+                                "clockLimit": 2000000000,
+                                "memoryLimit": 95656304705536,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            },
+                            {
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "stdin": {
+                                    "src": "/home/tt/./homework/h7/e2/case1.in",
+                                    "max": 419430400
+                                },
+                                "cpuLimit": 1000000000,
+                                "clockLimit": 2000000000,
+                                "memoryLimit": 95656304705536,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            }
+                        ]
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "diff",
+                        "with": {
+                            "name": "diff",
+                            "cases": [
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 5,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/./homework/h7/e2/case0.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                },
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 5,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/./homework/h7/e2/case1.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": true,
+                            "showMemory": true
+                        }
+                    }
+                ]
+            }
+        ],
+        "poststages": [
+            {
+                "name": "teapot",
+                "group": "",
+                "executor": {
+                    "name": "local",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "/usr/local/bin/joint-teapot",
+                                "joj3-all-env",
+                                "/home/tt/.config/teapot/teapot.env",
+                                "--grading-repo-name",
+                                "Nuvole-joj",
+                                "--max-total-score",
+                                "100"
+                            ],
+                            "env": [
+                                "LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 4096
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 4096
+                            },
+                            "cpuLimit": 4000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 8000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "log",
+                        "with": {
+                            "msg": "joj3 summary"
+                        }
+                    }
+                ]
+            }
+        ]
+    }
+}
diff --git a/tests/convert/clang-tidy/task.toml b/tests/convert/clang-tidy/task.toml
new file mode 100644
index 0000000..2dc7f07
--- /dev/null
+++ b/tests/convert/clang-tidy/task.toml
@@ -0,0 +1,102 @@
+# general task configuration
+task.name = "hw7 ex2" # task name
+task.type = "homework/h7/e2" # remove this task type later
+
+release.deadline = 2024-12-30 23:59:59+08:00
+release.begin_time = 2024-12-29 23:59:59+08:00
+
+[[stages]]
+name = "Compilation"
+command = "./tools/compile" # eg. script running cmake commands
+files.import = [ "tools/compile" ]
+files.export = [ "h7/build/ex2", "h7/build/ex2-asan", "h7/build/ex2-ubsan", "h7/build/ex2-msan", "h7/build/compile_commands.json" ]
+score = 1
+
+# compile parsers
+parsers = [ "result-detail", "result-status" ]
+result-status.comment = "Congratulations! Your code compiled successfully."
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+result-status.forcequit = true
+
+[[stages]]
+name = "[cq] Filelength"
+command = "./tools/filelength 400 300 *.cpp *.h"
+files.import = [ "tools/filelength" ]
+
+parsers = [ "keyword", "result-detail" ]
+keyword.keyword = [ "max", "recommended"]
+keyword.weight = [ 20, 10 ]
+result-detail.exitstatus = true
+result-detail.stdout = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Clang-tidy"
+command = "run-clang-tidy-18 -header-filter=.* -quiet -load=/usr/local/lib/libcodequality.so -p h7/build h7/ex2.cpp"
+files.import = [ "tests/homework/h7/.clang-tidy", "h7/build/compile_commands.json" ]
+limit.stdout = 65
+
+parsers = [ "clangtidy", "result-detail" ]
+clangtidy.keyword = [ "codequality-unchecked-malloc-result", "codequality-no-global-variables", "codequality-no-header-guard", "codequality-no-fflush-stdin", "readability-function-size", "readability-duplicate-include", "readability-identifier-naming", "readability-redundant", "readability-misleading-indentation", "readability-misplaced-array-index", "cppcoreguidelines-init-variables", "bugprone-suspicious-string-compare", "google-global-names-in-headers", "clang-diagnostic", "clang-analyzer", "misc", "performance", "portability" ]
+clangtidy.weight = [ 5, 20, 20, 20, 10, 5, 5, 5, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5]
+result-detail.exitstatus = true
+result-detail.stdout = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Cppcheck"
+command = "cppcheck --template='{\"file\":\"{file}\",\"line\":{line}, \"column\":{column}, \"severity\":\"{severity}\", \"message\":\"{message}\", \"id\":\"{id}\"}' --force --enable=all --suppress=missingIncludeSystem  --quiet h7/ex2.cpp"
+limit.stderr = 65
+
+parsers = [ "cppcheck", "result-detail" ]
+cppcheck.keyword = ["error", "warning", "portability", "performance", "style"]
+cppcheck.weight = [15, 5, 5, 5, 5]
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Cpplint"
+command = "cpplint --linelength=120 --filter=-legal,-readability/casting,-whitespace,-runtime/printf,-runtime/threadsafe_fn,-runtime/int,-readability/todo,-build/include_subdir,-build/header_guard,-build/include_what_you_use --recursive --exclude=build h7/ex2.cpp"
+limit.stdout = 65
+
+parsers = [ "cpplint", "result-detail" ]
+cpplint.keyword = [ "runtime", "readability", "build" ]
+cpplint.weight = [ 5, 20, 10]
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[joj] ex2-asan"
+command="./h7/build/ex2-asan -a"
+files.import = [ "h7/build/ex2-asan" ]
+limit.mem = 91224961
+
+parsers = [ "diff", "result-detail" ]
+result-detail.exitstatus = true
+result-detail.stderr = true
+
+# will be removed as long as the name is fixed
+case0.diff.output.score = 5
+case0.limit.cpu = 1
+case0.limit.mem = 91224961
+case0.diff.output.ignorespaces = true
+#case0.limit.stdout = 8
+#case0.command = "./h7/build/ex2"
+case0.in = "case0.in"
+
+case1.diff.output.score = 5
+case1.limit.cpu = 1
+case1.limit.mem = 91224961
+case1.diff.output.ignorespaces = true
+#case1.limit.stdout = 8
+#case1.command = "./h7/build/ex2"
+case1.in = "case1.in"
diff --git a/tests/convert/cppcheck/task.json b/tests/convert/cppcheck/task.json
new file mode 100644
index 0000000..2fb6ac3
--- /dev/null
+++ b/tests/convert/cppcheck/task.json
@@ -0,0 +1,872 @@
+{
+    "name": "hw7 ex2",
+    "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log",
+    "expireUnixTimestamp": 1735574399,
+    "effectiveUnixTimestamp": -1,
+    "actorCsvPath": "/home/tt/.config/joj/students.csv",
+    "maxTotalScore": 100,
+    "stage": {
+        "sandboxExecServer": "172.17.0.1:5051",
+        "sandboxToken": "test",
+        "outputPath": "/tmp/joj3_result.json",
+        "stages": [
+            {
+                "name": "healthcheck",
+                "group": "",
+                "executor": {
+                    "name": "local",
+                    "with": {
+                        "default": {
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 4096
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 4096
+                            },
+                            "cpuLimit": 4000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 8000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": [
+                            {
+                                "args": [
+                                    "/usr/local/bin/repo-health-checker",
+                                    "-root=.",
+                                    "-repoSize=50.5",
+                                    "-meta=README.md",
+                                    "-meta=Changelog.md",
+                                    "-checkFileSumList=a5b63323a692d3d8b952442969649b4f823d58dae26429494f613df160710dfc,b1bbad25b830db0a77b15a033f9ca1b7ab44c1d2d05056412bd3e4421645f0bf,f6740081487ca34963a005209e2e9adfdf6f3561719af082d40fe80145e0cceb,bbeca1491c2f8364821a328a6677c0c5d59ccd60250abac3cec0887eeb9bde3e",
+                                    "-checkFileNameList=.gitignore,.gitattributes,.gitea/workflows/push.yaml,.gitea/workflows/release.yaml"
+                                ],
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "cpuLimit": 4000000000000,
+                                "clockLimit": 8000000000000,
+                                "memoryLimit": 838860800,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            },
+                            {
+                                "args": [
+                                    "/usr/local/bin/joint-teapot",
+                                    "joj3-check-env",
+                                    "/home/tt/.config/teapot/teapot.env",
+                                    "--grading-repo-name",
+                                    "Nuvole-joj",
+                                    "--group-config",
+                                    "joj=1000:24,run=1000:24,=100:24"
+                                ],
+                                "env": [
+                                    "LOG_FILE_PATH=/home/nuvole0217/.cache/joint-teapot-debug.log"
+                                ],
+                                "cpuLimit": 4000000000000,
+                                "clockLimit": 8000000000000,
+                                "memoryLimit": 838860800,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            }
+                        ]
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "healthcheck",
+                        "with": {
+                            "score": 1
+                        }
+                    },
+                    {
+                        "name": "debug",
+                        "with": {
+                            "score": 0
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "Compilation",
+                "group": "",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./tools/compile"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tools/compile": {
+                                    "src": "/home/tt/./tools/tools/compile",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [
+                                "h7/build/ex2",
+                                "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json"
+                            ],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    },
+                    {
+                        "name": "result-status",
+                        "with": {
+                            "score": 0,
+                            "comment": "Congratulations! Your code compiled successfully.",
+                            "forceQuitOnNotAccepted": true
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Filelength",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./tools/filelength",
+                                "400",
+                                "300",
+                                "*.cpp",
+                                "*.h"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tools/filelength": {
+                                    "src": "/home/tt/./tools/tools/filelength",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "keyword",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "recommended"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "max"
+                                    ],
+                                    "score": 20
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stdout"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Clang-tidy",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "run-clang-tidy-18",
+                                "-header-filter=.*",
+                                "-quiet",
+                                "-load=/usr/local/lib/libcodequality.so",
+                                "-p",
+                                "h7/build",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 65000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tests/homework/h7/.clang-tidy": {
+                                    "src": "/home/tt/./tools/tests/homework/h7/.clang-tidy",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "clangtidy",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "readability-function-size"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "codequality-no-global-variables",
+                                        "codequality-no-header-guard",
+                                        "codequality-no-fflush-stdin"
+                                    ],
+                                    "score": 20
+                                },
+                                {
+                                    "keywords": [
+                                        "codequality-unchecked-malloc-result",
+                                        "readability-duplicate-include",
+                                        "readability-identifier-naming",
+                                        "readability-redundant",
+                                        "readability-misplaced-array-index",
+                                        "cppcoreguidelines-init-variables",
+                                        "bugprone-suspicious-string-compare",
+                                        "google-global-names-in-headers",
+                                        "clang-diagnostic",
+                                        "clang-analyzer",
+                                        "misc",
+                                        "performance",
+                                        "portability"
+                                    ],
+                                    "score": 5
+                                },
+                                {
+                                    "keywords": [
+                                        "readability-misleading-indentation"
+                                    ],
+                                    "score": 15
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stdout"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Cppcheck",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "cppcheck",
+                                "--template={\"file\":\"{file}\",\"line\":{line}, \"column\":{column}, \"severity\":\"{severity}\", \"message\":\"{message}\", \"id\":\"{id}\"}",
+                                "--force",
+                                "--enable=all",
+                                "--suppress=missingIncludeSystem",
+                                "--quiet",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 65000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "cppcheck",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "warning",
+                                        "portability",
+                                        "performance",
+                                        "style"
+                                    ],
+                                    "score": 5
+                                },
+                                {
+                                    "keywords": [
+                                        "error"
+                                    ],
+                                    "score": 15
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Cpplint",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "cpplint",
+                                "--linelength=120",
+                                "--filter=-legal,-readability/casting,-whitespace,-runtime/printf,-runtime/threadsafe_fn,-runtime/int,-readability/todo,-build/include_subdir,-build/header_guard,-build/include_what_you_use",
+                                "--recursive",
+                                "--exclude=build",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 65000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "cpplint",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "build"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "readability"
+                                    ],
+                                    "score": 20
+                                },
+                                {
+                                    "keywords": [
+                                        "runtime"
+                                    ],
+                                    "score": 5
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[joj] ex2-asan",
+                "group": "joj",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./h7/build/ex2-asan",
+                                "-a"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 95656304705536,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": [
+                            {
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "stdin": {
+                                    "src": "/home/tt/./homework/h7/e2/case0.in",
+                                    "max": 419430400
+                                },
+                                "cpuLimit": 1000000000,
+                                "clockLimit": 2000000000,
+                                "memoryLimit": 95656304705536,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            },
+                            {
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "stdin": {
+                                    "src": "/home/tt/./homework/h7/e2/case1.in",
+                                    "max": 419430400
+                                },
+                                "cpuLimit": 1000000000,
+                                "clockLimit": 2000000000,
+                                "memoryLimit": 95656304705536,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            }
+                        ]
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "diff",
+                        "with": {
+                            "name": "diff",
+                            "cases": [
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 5,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/./homework/h7/e2/case0.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                },
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 5,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/./homework/h7/e2/case1.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": true,
+                            "showMemory": true
+                        }
+                    }
+                ]
+            }
+        ],
+        "poststages": [
+            {
+                "name": "teapot",
+                "group": "",
+                "executor": {
+                    "name": "local",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "/usr/local/bin/joint-teapot",
+                                "joj3-all-env",
+                                "/home/tt/.config/teapot/teapot.env",
+                                "--grading-repo-name",
+                                "Nuvole-joj",
+                                "--max-total-score",
+                                "100"
+                            ],
+                            "env": [
+                                "LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 4096
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 4096
+                            },
+                            "cpuLimit": 4000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 8000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "log",
+                        "with": {
+                            "msg": "joj3 summary"
+                        }
+                    }
+                ]
+            }
+        ]
+    }
+}
diff --git a/tests/convert/cppcheck/task.toml b/tests/convert/cppcheck/task.toml
new file mode 100644
index 0000000..2dc7f07
--- /dev/null
+++ b/tests/convert/cppcheck/task.toml
@@ -0,0 +1,102 @@
+# general task configuration
+task.name = "hw7 ex2" # task name
+task.type = "homework/h7/e2" # remove this task type later
+
+release.deadline = 2024-12-30 23:59:59+08:00
+release.begin_time = 2024-12-29 23:59:59+08:00
+
+[[stages]]
+name = "Compilation"
+command = "./tools/compile" # eg. script running cmake commands
+files.import = [ "tools/compile" ]
+files.export = [ "h7/build/ex2", "h7/build/ex2-asan", "h7/build/ex2-ubsan", "h7/build/ex2-msan", "h7/build/compile_commands.json" ]
+score = 1
+
+# compile parsers
+parsers = [ "result-detail", "result-status" ]
+result-status.comment = "Congratulations! Your code compiled successfully."
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+result-status.forcequit = true
+
+[[stages]]
+name = "[cq] Filelength"
+command = "./tools/filelength 400 300 *.cpp *.h"
+files.import = [ "tools/filelength" ]
+
+parsers = [ "keyword", "result-detail" ]
+keyword.keyword = [ "max", "recommended"]
+keyword.weight = [ 20, 10 ]
+result-detail.exitstatus = true
+result-detail.stdout = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Clang-tidy"
+command = "run-clang-tidy-18 -header-filter=.* -quiet -load=/usr/local/lib/libcodequality.so -p h7/build h7/ex2.cpp"
+files.import = [ "tests/homework/h7/.clang-tidy", "h7/build/compile_commands.json" ]
+limit.stdout = 65
+
+parsers = [ "clangtidy", "result-detail" ]
+clangtidy.keyword = [ "codequality-unchecked-malloc-result", "codequality-no-global-variables", "codequality-no-header-guard", "codequality-no-fflush-stdin", "readability-function-size", "readability-duplicate-include", "readability-identifier-naming", "readability-redundant", "readability-misleading-indentation", "readability-misplaced-array-index", "cppcoreguidelines-init-variables", "bugprone-suspicious-string-compare", "google-global-names-in-headers", "clang-diagnostic", "clang-analyzer", "misc", "performance", "portability" ]
+clangtidy.weight = [ 5, 20, 20, 20, 10, 5, 5, 5, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5]
+result-detail.exitstatus = true
+result-detail.stdout = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Cppcheck"
+command = "cppcheck --template='{\"file\":\"{file}\",\"line\":{line}, \"column\":{column}, \"severity\":\"{severity}\", \"message\":\"{message}\", \"id\":\"{id}\"}' --force --enable=all --suppress=missingIncludeSystem  --quiet h7/ex2.cpp"
+limit.stderr = 65
+
+parsers = [ "cppcheck", "result-detail" ]
+cppcheck.keyword = ["error", "warning", "portability", "performance", "style"]
+cppcheck.weight = [15, 5, 5, 5, 5]
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Cpplint"
+command = "cpplint --linelength=120 --filter=-legal,-readability/casting,-whitespace,-runtime/printf,-runtime/threadsafe_fn,-runtime/int,-readability/todo,-build/include_subdir,-build/header_guard,-build/include_what_you_use --recursive --exclude=build h7/ex2.cpp"
+limit.stdout = 65
+
+parsers = [ "cpplint", "result-detail" ]
+cpplint.keyword = [ "runtime", "readability", "build" ]
+cpplint.weight = [ 5, 20, 10]
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[joj] ex2-asan"
+command="./h7/build/ex2-asan -a"
+files.import = [ "h7/build/ex2-asan" ]
+limit.mem = 91224961
+
+parsers = [ "diff", "result-detail" ]
+result-detail.exitstatus = true
+result-detail.stderr = true
+
+# will be removed as long as the name is fixed
+case0.diff.output.score = 5
+case0.limit.cpu = 1
+case0.limit.mem = 91224961
+case0.diff.output.ignorespaces = true
+#case0.limit.stdout = 8
+#case0.command = "./h7/build/ex2"
+case0.in = "case0.in"
+
+case1.diff.output.score = 5
+case1.limit.cpu = 1
+case1.limit.mem = 91224961
+case1.diff.output.ignorespaces = true
+#case1.limit.stdout = 8
+#case1.command = "./h7/build/ex2"
+case1.in = "case1.in"
diff --git a/tests/convert/cpplint/task.json b/tests/convert/cpplint/task.json
new file mode 100644
index 0000000..2fb6ac3
--- /dev/null
+++ b/tests/convert/cpplint/task.json
@@ -0,0 +1,872 @@
+{
+    "name": "hw7 ex2",
+    "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log",
+    "expireUnixTimestamp": 1735574399,
+    "effectiveUnixTimestamp": -1,
+    "actorCsvPath": "/home/tt/.config/joj/students.csv",
+    "maxTotalScore": 100,
+    "stage": {
+        "sandboxExecServer": "172.17.0.1:5051",
+        "sandboxToken": "test",
+        "outputPath": "/tmp/joj3_result.json",
+        "stages": [
+            {
+                "name": "healthcheck",
+                "group": "",
+                "executor": {
+                    "name": "local",
+                    "with": {
+                        "default": {
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 4096
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 4096
+                            },
+                            "cpuLimit": 4000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 8000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": [
+                            {
+                                "args": [
+                                    "/usr/local/bin/repo-health-checker",
+                                    "-root=.",
+                                    "-repoSize=50.5",
+                                    "-meta=README.md",
+                                    "-meta=Changelog.md",
+                                    "-checkFileSumList=a5b63323a692d3d8b952442969649b4f823d58dae26429494f613df160710dfc,b1bbad25b830db0a77b15a033f9ca1b7ab44c1d2d05056412bd3e4421645f0bf,f6740081487ca34963a005209e2e9adfdf6f3561719af082d40fe80145e0cceb,bbeca1491c2f8364821a328a6677c0c5d59ccd60250abac3cec0887eeb9bde3e",
+                                    "-checkFileNameList=.gitignore,.gitattributes,.gitea/workflows/push.yaml,.gitea/workflows/release.yaml"
+                                ],
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "cpuLimit": 4000000000000,
+                                "clockLimit": 8000000000000,
+                                "memoryLimit": 838860800,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            },
+                            {
+                                "args": [
+                                    "/usr/local/bin/joint-teapot",
+                                    "joj3-check-env",
+                                    "/home/tt/.config/teapot/teapot.env",
+                                    "--grading-repo-name",
+                                    "Nuvole-joj",
+                                    "--group-config",
+                                    "joj=1000:24,run=1000:24,=100:24"
+                                ],
+                                "env": [
+                                    "LOG_FILE_PATH=/home/nuvole0217/.cache/joint-teapot-debug.log"
+                                ],
+                                "cpuLimit": 4000000000000,
+                                "clockLimit": 8000000000000,
+                                "memoryLimit": 838860800,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            }
+                        ]
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "healthcheck",
+                        "with": {
+                            "score": 1
+                        }
+                    },
+                    {
+                        "name": "debug",
+                        "with": {
+                            "score": 0
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "Compilation",
+                "group": "",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./tools/compile"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tools/compile": {
+                                    "src": "/home/tt/./tools/tools/compile",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [
+                                "h7/build/ex2",
+                                "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json"
+                            ],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    },
+                    {
+                        "name": "result-status",
+                        "with": {
+                            "score": 0,
+                            "comment": "Congratulations! Your code compiled successfully.",
+                            "forceQuitOnNotAccepted": true
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Filelength",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./tools/filelength",
+                                "400",
+                                "300",
+                                "*.cpp",
+                                "*.h"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tools/filelength": {
+                                    "src": "/home/tt/./tools/tools/filelength",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "keyword",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "recommended"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "max"
+                                    ],
+                                    "score": 20
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stdout"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Clang-tidy",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "run-clang-tidy-18",
+                                "-header-filter=.*",
+                                "-quiet",
+                                "-load=/usr/local/lib/libcodequality.so",
+                                "-p",
+                                "h7/build",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 65000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tests/homework/h7/.clang-tidy": {
+                                    "src": "/home/tt/./tools/tests/homework/h7/.clang-tidy",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "clangtidy",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "readability-function-size"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "codequality-no-global-variables",
+                                        "codequality-no-header-guard",
+                                        "codequality-no-fflush-stdin"
+                                    ],
+                                    "score": 20
+                                },
+                                {
+                                    "keywords": [
+                                        "codequality-unchecked-malloc-result",
+                                        "readability-duplicate-include",
+                                        "readability-identifier-naming",
+                                        "readability-redundant",
+                                        "readability-misplaced-array-index",
+                                        "cppcoreguidelines-init-variables",
+                                        "bugprone-suspicious-string-compare",
+                                        "google-global-names-in-headers",
+                                        "clang-diagnostic",
+                                        "clang-analyzer",
+                                        "misc",
+                                        "performance",
+                                        "portability"
+                                    ],
+                                    "score": 5
+                                },
+                                {
+                                    "keywords": [
+                                        "readability-misleading-indentation"
+                                    ],
+                                    "score": 15
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stdout"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Cppcheck",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "cppcheck",
+                                "--template={\"file\":\"{file}\",\"line\":{line}, \"column\":{column}, \"severity\":\"{severity}\", \"message\":\"{message}\", \"id\":\"{id}\"}",
+                                "--force",
+                                "--enable=all",
+                                "--suppress=missingIncludeSystem",
+                                "--quiet",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 65000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "cppcheck",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "warning",
+                                        "portability",
+                                        "performance",
+                                        "style"
+                                    ],
+                                    "score": 5
+                                },
+                                {
+                                    "keywords": [
+                                        "error"
+                                    ],
+                                    "score": 15
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Cpplint",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "cpplint",
+                                "--linelength=120",
+                                "--filter=-legal,-readability/casting,-whitespace,-runtime/printf,-runtime/threadsafe_fn,-runtime/int,-readability/todo,-build/include_subdir,-build/header_guard,-build/include_what_you_use",
+                                "--recursive",
+                                "--exclude=build",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 65000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "cpplint",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "build"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "readability"
+                                    ],
+                                    "score": 20
+                                },
+                                {
+                                    "keywords": [
+                                        "runtime"
+                                    ],
+                                    "score": 5
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[joj] ex2-asan",
+                "group": "joj",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./h7/build/ex2-asan",
+                                "-a"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 95656304705536,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": [
+                            {
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "stdin": {
+                                    "src": "/home/tt/./homework/h7/e2/case0.in",
+                                    "max": 419430400
+                                },
+                                "cpuLimit": 1000000000,
+                                "clockLimit": 2000000000,
+                                "memoryLimit": 95656304705536,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            },
+                            {
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "stdin": {
+                                    "src": "/home/tt/./homework/h7/e2/case1.in",
+                                    "max": 419430400
+                                },
+                                "cpuLimit": 1000000000,
+                                "clockLimit": 2000000000,
+                                "memoryLimit": 95656304705536,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            }
+                        ]
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "diff",
+                        "with": {
+                            "name": "diff",
+                            "cases": [
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 5,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/./homework/h7/e2/case0.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                },
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 5,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/./homework/h7/e2/case1.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": true,
+                            "showMemory": true
+                        }
+                    }
+                ]
+            }
+        ],
+        "poststages": [
+            {
+                "name": "teapot",
+                "group": "",
+                "executor": {
+                    "name": "local",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "/usr/local/bin/joint-teapot",
+                                "joj3-all-env",
+                                "/home/tt/.config/teapot/teapot.env",
+                                "--grading-repo-name",
+                                "Nuvole-joj",
+                                "--max-total-score",
+                                "100"
+                            ],
+                            "env": [
+                                "LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 4096
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 4096
+                            },
+                            "cpuLimit": 4000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 8000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "log",
+                        "with": {
+                            "msg": "joj3 summary"
+                        }
+                    }
+                ]
+            }
+        ]
+    }
+}
diff --git a/tests/convert/cpplint/task.toml b/tests/convert/cpplint/task.toml
new file mode 100644
index 0000000..2dc7f07
--- /dev/null
+++ b/tests/convert/cpplint/task.toml
@@ -0,0 +1,102 @@
+# general task configuration
+task.name = "hw7 ex2" # task name
+task.type = "homework/h7/e2" # remove this task type later
+
+release.deadline = 2024-12-30 23:59:59+08:00
+release.begin_time = 2024-12-29 23:59:59+08:00
+
+[[stages]]
+name = "Compilation"
+command = "./tools/compile" # eg. script running cmake commands
+files.import = [ "tools/compile" ]
+files.export = [ "h7/build/ex2", "h7/build/ex2-asan", "h7/build/ex2-ubsan", "h7/build/ex2-msan", "h7/build/compile_commands.json" ]
+score = 1
+
+# compile parsers
+parsers = [ "result-detail", "result-status" ]
+result-status.comment = "Congratulations! Your code compiled successfully."
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+result-status.forcequit = true
+
+[[stages]]
+name = "[cq] Filelength"
+command = "./tools/filelength 400 300 *.cpp *.h"
+files.import = [ "tools/filelength" ]
+
+parsers = [ "keyword", "result-detail" ]
+keyword.keyword = [ "max", "recommended"]
+keyword.weight = [ 20, 10 ]
+result-detail.exitstatus = true
+result-detail.stdout = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Clang-tidy"
+command = "run-clang-tidy-18 -header-filter=.* -quiet -load=/usr/local/lib/libcodequality.so -p h7/build h7/ex2.cpp"
+files.import = [ "tests/homework/h7/.clang-tidy", "h7/build/compile_commands.json" ]
+limit.stdout = 65
+
+parsers = [ "clangtidy", "result-detail" ]
+clangtidy.keyword = [ "codequality-unchecked-malloc-result", "codequality-no-global-variables", "codequality-no-header-guard", "codequality-no-fflush-stdin", "readability-function-size", "readability-duplicate-include", "readability-identifier-naming", "readability-redundant", "readability-misleading-indentation", "readability-misplaced-array-index", "cppcoreguidelines-init-variables", "bugprone-suspicious-string-compare", "google-global-names-in-headers", "clang-diagnostic", "clang-analyzer", "misc", "performance", "portability" ]
+clangtidy.weight = [ 5, 20, 20, 20, 10, 5, 5, 5, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5]
+result-detail.exitstatus = true
+result-detail.stdout = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Cppcheck"
+command = "cppcheck --template='{\"file\":\"{file}\",\"line\":{line}, \"column\":{column}, \"severity\":\"{severity}\", \"message\":\"{message}\", \"id\":\"{id}\"}' --force --enable=all --suppress=missingIncludeSystem  --quiet h7/ex2.cpp"
+limit.stderr = 65
+
+parsers = [ "cppcheck", "result-detail" ]
+cppcheck.keyword = ["error", "warning", "portability", "performance", "style"]
+cppcheck.weight = [15, 5, 5, 5, 5]
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Cpplint"
+command = "cpplint --linelength=120 --filter=-legal,-readability/casting,-whitespace,-runtime/printf,-runtime/threadsafe_fn,-runtime/int,-readability/todo,-build/include_subdir,-build/header_guard,-build/include_what_you_use --recursive --exclude=build h7/ex2.cpp"
+limit.stdout = 65
+
+parsers = [ "cpplint", "result-detail" ]
+cpplint.keyword = [ "runtime", "readability", "build" ]
+cpplint.weight = [ 5, 20, 10]
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[joj] ex2-asan"
+command="./h7/build/ex2-asan -a"
+files.import = [ "h7/build/ex2-asan" ]
+limit.mem = 91224961
+
+parsers = [ "diff", "result-detail" ]
+result-detail.exitstatus = true
+result-detail.stderr = true
+
+# will be removed as long as the name is fixed
+case0.diff.output.score = 5
+case0.limit.cpu = 1
+case0.limit.mem = 91224961
+case0.diff.output.ignorespaces = true
+#case0.limit.stdout = 8
+#case0.command = "./h7/build/ex2"
+case0.in = "case0.in"
+
+case1.diff.output.score = 5
+case1.limit.cpu = 1
+case1.limit.mem = 91224961
+case1.diff.output.ignorespaces = true
+#case1.limit.stdout = 8
+#case1.command = "./h7/build/ex2"
+case1.in = "case1.in"
diff --git a/tests/convert/diff/task.json b/tests/convert/diff/task.json
new file mode 100644
index 0000000..2fb6ac3
--- /dev/null
+++ b/tests/convert/diff/task.json
@@ -0,0 +1,872 @@
+{
+    "name": "hw7 ex2",
+    "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log",
+    "expireUnixTimestamp": 1735574399,
+    "effectiveUnixTimestamp": -1,
+    "actorCsvPath": "/home/tt/.config/joj/students.csv",
+    "maxTotalScore": 100,
+    "stage": {
+        "sandboxExecServer": "172.17.0.1:5051",
+        "sandboxToken": "test",
+        "outputPath": "/tmp/joj3_result.json",
+        "stages": [
+            {
+                "name": "healthcheck",
+                "group": "",
+                "executor": {
+                    "name": "local",
+                    "with": {
+                        "default": {
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 4096
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 4096
+                            },
+                            "cpuLimit": 4000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 8000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": [
+                            {
+                                "args": [
+                                    "/usr/local/bin/repo-health-checker",
+                                    "-root=.",
+                                    "-repoSize=50.5",
+                                    "-meta=README.md",
+                                    "-meta=Changelog.md",
+                                    "-checkFileSumList=a5b63323a692d3d8b952442969649b4f823d58dae26429494f613df160710dfc,b1bbad25b830db0a77b15a033f9ca1b7ab44c1d2d05056412bd3e4421645f0bf,f6740081487ca34963a005209e2e9adfdf6f3561719af082d40fe80145e0cceb,bbeca1491c2f8364821a328a6677c0c5d59ccd60250abac3cec0887eeb9bde3e",
+                                    "-checkFileNameList=.gitignore,.gitattributes,.gitea/workflows/push.yaml,.gitea/workflows/release.yaml"
+                                ],
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "cpuLimit": 4000000000000,
+                                "clockLimit": 8000000000000,
+                                "memoryLimit": 838860800,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            },
+                            {
+                                "args": [
+                                    "/usr/local/bin/joint-teapot",
+                                    "joj3-check-env",
+                                    "/home/tt/.config/teapot/teapot.env",
+                                    "--grading-repo-name",
+                                    "Nuvole-joj",
+                                    "--group-config",
+                                    "joj=1000:24,run=1000:24,=100:24"
+                                ],
+                                "env": [
+                                    "LOG_FILE_PATH=/home/nuvole0217/.cache/joint-teapot-debug.log"
+                                ],
+                                "cpuLimit": 4000000000000,
+                                "clockLimit": 8000000000000,
+                                "memoryLimit": 838860800,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            }
+                        ]
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "healthcheck",
+                        "with": {
+                            "score": 1
+                        }
+                    },
+                    {
+                        "name": "debug",
+                        "with": {
+                            "score": 0
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "Compilation",
+                "group": "",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./tools/compile"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tools/compile": {
+                                    "src": "/home/tt/./tools/tools/compile",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [
+                                "h7/build/ex2",
+                                "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json"
+                            ],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    },
+                    {
+                        "name": "result-status",
+                        "with": {
+                            "score": 0,
+                            "comment": "Congratulations! Your code compiled successfully.",
+                            "forceQuitOnNotAccepted": true
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Filelength",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./tools/filelength",
+                                "400",
+                                "300",
+                                "*.cpp",
+                                "*.h"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tools/filelength": {
+                                    "src": "/home/tt/./tools/tools/filelength",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "keyword",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "recommended"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "max"
+                                    ],
+                                    "score": 20
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stdout"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Clang-tidy",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "run-clang-tidy-18",
+                                "-header-filter=.*",
+                                "-quiet",
+                                "-load=/usr/local/lib/libcodequality.so",
+                                "-p",
+                                "h7/build",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 65000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tests/homework/h7/.clang-tidy": {
+                                    "src": "/home/tt/./tools/tests/homework/h7/.clang-tidy",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "clangtidy",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "readability-function-size"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "codequality-no-global-variables",
+                                        "codequality-no-header-guard",
+                                        "codequality-no-fflush-stdin"
+                                    ],
+                                    "score": 20
+                                },
+                                {
+                                    "keywords": [
+                                        "codequality-unchecked-malloc-result",
+                                        "readability-duplicate-include",
+                                        "readability-identifier-naming",
+                                        "readability-redundant",
+                                        "readability-misplaced-array-index",
+                                        "cppcoreguidelines-init-variables",
+                                        "bugprone-suspicious-string-compare",
+                                        "google-global-names-in-headers",
+                                        "clang-diagnostic",
+                                        "clang-analyzer",
+                                        "misc",
+                                        "performance",
+                                        "portability"
+                                    ],
+                                    "score": 5
+                                },
+                                {
+                                    "keywords": [
+                                        "readability-misleading-indentation"
+                                    ],
+                                    "score": 15
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stdout"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Cppcheck",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "cppcheck",
+                                "--template={\"file\":\"{file}\",\"line\":{line}, \"column\":{column}, \"severity\":\"{severity}\", \"message\":\"{message}\", \"id\":\"{id}\"}",
+                                "--force",
+                                "--enable=all",
+                                "--suppress=missingIncludeSystem",
+                                "--quiet",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 65000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "cppcheck",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "warning",
+                                        "portability",
+                                        "performance",
+                                        "style"
+                                    ],
+                                    "score": 5
+                                },
+                                {
+                                    "keywords": [
+                                        "error"
+                                    ],
+                                    "score": 15
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Cpplint",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "cpplint",
+                                "--linelength=120",
+                                "--filter=-legal,-readability/casting,-whitespace,-runtime/printf,-runtime/threadsafe_fn,-runtime/int,-readability/todo,-build/include_subdir,-build/header_guard,-build/include_what_you_use",
+                                "--recursive",
+                                "--exclude=build",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 65000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "cpplint",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "build"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "readability"
+                                    ],
+                                    "score": 20
+                                },
+                                {
+                                    "keywords": [
+                                        "runtime"
+                                    ],
+                                    "score": 5
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[joj] ex2-asan",
+                "group": "joj",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./h7/build/ex2-asan",
+                                "-a"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 95656304705536,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": [
+                            {
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "stdin": {
+                                    "src": "/home/tt/./homework/h7/e2/case0.in",
+                                    "max": 419430400
+                                },
+                                "cpuLimit": 1000000000,
+                                "clockLimit": 2000000000,
+                                "memoryLimit": 95656304705536,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            },
+                            {
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "stdin": {
+                                    "src": "/home/tt/./homework/h7/e2/case1.in",
+                                    "max": 419430400
+                                },
+                                "cpuLimit": 1000000000,
+                                "clockLimit": 2000000000,
+                                "memoryLimit": 95656304705536,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            }
+                        ]
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "diff",
+                        "with": {
+                            "name": "diff",
+                            "cases": [
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 5,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/./homework/h7/e2/case0.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                },
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 5,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/./homework/h7/e2/case1.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": true,
+                            "showMemory": true
+                        }
+                    }
+                ]
+            }
+        ],
+        "poststages": [
+            {
+                "name": "teapot",
+                "group": "",
+                "executor": {
+                    "name": "local",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "/usr/local/bin/joint-teapot",
+                                "joj3-all-env",
+                                "/home/tt/.config/teapot/teapot.env",
+                                "--grading-repo-name",
+                                "Nuvole-joj",
+                                "--max-total-score",
+                                "100"
+                            ],
+                            "env": [
+                                "LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 4096
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 4096
+                            },
+                            "cpuLimit": 4000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 8000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "log",
+                        "with": {
+                            "msg": "joj3 summary"
+                        }
+                    }
+                ]
+            }
+        ]
+    }
+}
diff --git a/tests/convert/diff/task.toml b/tests/convert/diff/task.toml
new file mode 100644
index 0000000..2dc7f07
--- /dev/null
+++ b/tests/convert/diff/task.toml
@@ -0,0 +1,102 @@
+# general task configuration
+task.name = "hw7 ex2" # task name
+task.type = "homework/h7/e2" # remove this task type later
+
+release.deadline = 2024-12-30 23:59:59+08:00
+release.begin_time = 2024-12-29 23:59:59+08:00
+
+[[stages]]
+name = "Compilation"
+command = "./tools/compile" # eg. script running cmake commands
+files.import = [ "tools/compile" ]
+files.export = [ "h7/build/ex2", "h7/build/ex2-asan", "h7/build/ex2-ubsan", "h7/build/ex2-msan", "h7/build/compile_commands.json" ]
+score = 1
+
+# compile parsers
+parsers = [ "result-detail", "result-status" ]
+result-status.comment = "Congratulations! Your code compiled successfully."
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+result-status.forcequit = true
+
+[[stages]]
+name = "[cq] Filelength"
+command = "./tools/filelength 400 300 *.cpp *.h"
+files.import = [ "tools/filelength" ]
+
+parsers = [ "keyword", "result-detail" ]
+keyword.keyword = [ "max", "recommended"]
+keyword.weight = [ 20, 10 ]
+result-detail.exitstatus = true
+result-detail.stdout = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Clang-tidy"
+command = "run-clang-tidy-18 -header-filter=.* -quiet -load=/usr/local/lib/libcodequality.so -p h7/build h7/ex2.cpp"
+files.import = [ "tests/homework/h7/.clang-tidy", "h7/build/compile_commands.json" ]
+limit.stdout = 65
+
+parsers = [ "clangtidy", "result-detail" ]
+clangtidy.keyword = [ "codequality-unchecked-malloc-result", "codequality-no-global-variables", "codequality-no-header-guard", "codequality-no-fflush-stdin", "readability-function-size", "readability-duplicate-include", "readability-identifier-naming", "readability-redundant", "readability-misleading-indentation", "readability-misplaced-array-index", "cppcoreguidelines-init-variables", "bugprone-suspicious-string-compare", "google-global-names-in-headers", "clang-diagnostic", "clang-analyzer", "misc", "performance", "portability" ]
+clangtidy.weight = [ 5, 20, 20, 20, 10, 5, 5, 5, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5]
+result-detail.exitstatus = true
+result-detail.stdout = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Cppcheck"
+command = "cppcheck --template='{\"file\":\"{file}\",\"line\":{line}, \"column\":{column}, \"severity\":\"{severity}\", \"message\":\"{message}\", \"id\":\"{id}\"}' --force --enable=all --suppress=missingIncludeSystem  --quiet h7/ex2.cpp"
+limit.stderr = 65
+
+parsers = [ "cppcheck", "result-detail" ]
+cppcheck.keyword = ["error", "warning", "portability", "performance", "style"]
+cppcheck.weight = [15, 5, 5, 5, 5]
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Cpplint"
+command = "cpplint --linelength=120 --filter=-legal,-readability/casting,-whitespace,-runtime/printf,-runtime/threadsafe_fn,-runtime/int,-readability/todo,-build/include_subdir,-build/header_guard,-build/include_what_you_use --recursive --exclude=build h7/ex2.cpp"
+limit.stdout = 65
+
+parsers = [ "cpplint", "result-detail" ]
+cpplint.keyword = [ "runtime", "readability", "build" ]
+cpplint.weight = [ 5, 20, 10]
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[joj] ex2-asan"
+command="./h7/build/ex2-asan -a"
+files.import = [ "h7/build/ex2-asan" ]
+limit.mem = 91224961
+
+parsers = [ "diff", "result-detail" ]
+result-detail.exitstatus = true
+result-detail.stderr = true
+
+# will be removed as long as the name is fixed
+case0.diff.output.score = 5
+case0.limit.cpu = 1
+case0.limit.mem = 91224961
+case0.diff.output.ignorespaces = true
+#case0.limit.stdout = 8
+#case0.command = "./h7/build/ex2"
+case0.in = "case0.in"
+
+case1.diff.output.score = 5
+case1.limit.cpu = 1
+case1.limit.mem = 91224961
+case1.diff.output.ignorespaces = true
+#case1.limit.stdout = 8
+#case1.command = "./h7/build/ex2"
+case1.in = "case1.in"
diff --git a/tests/convert/keyword/task.json b/tests/convert/keyword/task.json
new file mode 100644
index 0000000..2fb6ac3
--- /dev/null
+++ b/tests/convert/keyword/task.json
@@ -0,0 +1,872 @@
+{
+    "name": "hw7 ex2",
+    "logPath": "/home/tt/.cache/joj3/homework/h7/e2.log",
+    "expireUnixTimestamp": 1735574399,
+    "effectiveUnixTimestamp": -1,
+    "actorCsvPath": "/home/tt/.config/joj/students.csv",
+    "maxTotalScore": 100,
+    "stage": {
+        "sandboxExecServer": "172.17.0.1:5051",
+        "sandboxToken": "test",
+        "outputPath": "/tmp/joj3_result.json",
+        "stages": [
+            {
+                "name": "healthcheck",
+                "group": "",
+                "executor": {
+                    "name": "local",
+                    "with": {
+                        "default": {
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 4096
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 4096
+                            },
+                            "cpuLimit": 4000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 8000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": [
+                            {
+                                "args": [
+                                    "/usr/local/bin/repo-health-checker",
+                                    "-root=.",
+                                    "-repoSize=50.5",
+                                    "-meta=README.md",
+                                    "-meta=Changelog.md",
+                                    "-checkFileSumList=a5b63323a692d3d8b952442969649b4f823d58dae26429494f613df160710dfc,b1bbad25b830db0a77b15a033f9ca1b7ab44c1d2d05056412bd3e4421645f0bf,f6740081487ca34963a005209e2e9adfdf6f3561719af082d40fe80145e0cceb,bbeca1491c2f8364821a328a6677c0c5d59ccd60250abac3cec0887eeb9bde3e",
+                                    "-checkFileNameList=.gitignore,.gitattributes,.gitea/workflows/push.yaml,.gitea/workflows/release.yaml"
+                                ],
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "cpuLimit": 4000000000000,
+                                "clockLimit": 8000000000000,
+                                "memoryLimit": 838860800,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            },
+                            {
+                                "args": [
+                                    "/usr/local/bin/joint-teapot",
+                                    "joj3-check-env",
+                                    "/home/tt/.config/teapot/teapot.env",
+                                    "--grading-repo-name",
+                                    "Nuvole-joj",
+                                    "--group-config",
+                                    "joj=1000:24,run=1000:24,=100:24"
+                                ],
+                                "env": [
+                                    "LOG_FILE_PATH=/home/nuvole0217/.cache/joint-teapot-debug.log"
+                                ],
+                                "cpuLimit": 4000000000000,
+                                "clockLimit": 8000000000000,
+                                "memoryLimit": 838860800,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            }
+                        ]
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "healthcheck",
+                        "with": {
+                            "score": 1
+                        }
+                    },
+                    {
+                        "name": "debug",
+                        "with": {
+                            "score": 0
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "Compilation",
+                "group": "",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./tools/compile"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tools/compile": {
+                                    "src": "/home/tt/./tools/tools/compile",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [
+                                "h7/build/ex2",
+                                "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json"
+                            ],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    },
+                    {
+                        "name": "result-status",
+                        "with": {
+                            "score": 0,
+                            "comment": "Congratulations! Your code compiled successfully.",
+                            "forceQuitOnNotAccepted": true
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Filelength",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./tools/filelength",
+                                "400",
+                                "300",
+                                "*.cpp",
+                                "*.h"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tools/filelength": {
+                                    "src": "/home/tt/./tools/tools/filelength",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "keyword",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "recommended"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "max"
+                                    ],
+                                    "score": 20
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stdout"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Clang-tidy",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "run-clang-tidy-18",
+                                "-header-filter=.*",
+                                "-quiet",
+                                "-load=/usr/local/lib/libcodequality.so",
+                                "-p",
+                                "h7/build",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 65000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {
+                                "tests/homework/h7/.clang-tidy": {
+                                    "src": "/home/tt/./tools/tests/homework/h7/.clang-tidy",
+                                    "max": 419430400
+                                }
+                            },
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "clangtidy",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "readability-function-size"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "codequality-no-global-variables",
+                                        "codequality-no-header-guard",
+                                        "codequality-no-fflush-stdin"
+                                    ],
+                                    "score": 20
+                                },
+                                {
+                                    "keywords": [
+                                        "codequality-unchecked-malloc-result",
+                                        "readability-duplicate-include",
+                                        "readability-identifier-naming",
+                                        "readability-redundant",
+                                        "readability-misplaced-array-index",
+                                        "cppcoreguidelines-init-variables",
+                                        "bugprone-suspicious-string-compare",
+                                        "google-global-names-in-headers",
+                                        "clang-diagnostic",
+                                        "clang-analyzer",
+                                        "misc",
+                                        "performance",
+                                        "portability"
+                                    ],
+                                    "score": 5
+                                },
+                                {
+                                    "keywords": [
+                                        "readability-misleading-indentation"
+                                    ],
+                                    "score": 15
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stdout"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Cppcheck",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "cppcheck",
+                                "--template={\"file\":\"{file}\",\"line\":{line}, \"column\":{column}, \"severity\":\"{severity}\", \"message\":\"{message}\", \"id\":\"{id}\"}",
+                                "--force",
+                                "--enable=all",
+                                "--suppress=missingIncludeSystem",
+                                "--quiet",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 65000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "cppcheck",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "warning",
+                                        "portability",
+                                        "performance",
+                                        "style"
+                                    ],
+                                    "score": 5
+                                },
+                                {
+                                    "keywords": [
+                                        "error"
+                                    ],
+                                    "score": 15
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[cq] Cpplint",
+                "group": "cq",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "cpplint",
+                                "--linelength=120",
+                                "--filter=-legal,-readability/casting,-whitespace,-runtime/printf,-runtime/threadsafe_fn,-runtime/int,-readability/todo,-build/include_subdir,-build/header_guard,-build/include_what_you_use",
+                                "--recursive",
+                                "--exclude=build",
+                                "h7/ex2.cpp"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 65000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "cpplint",
+                        "with": {
+                            "matches": [
+                                {
+                                    "keywords": [
+                                        "build"
+                                    ],
+                                    "score": 10
+                                },
+                                {
+                                    "keywords": [
+                                        "readability"
+                                    ],
+                                    "score": 20
+                                },
+                                {
+                                    "keywords": [
+                                        "runtime"
+                                    ],
+                                    "score": 5
+                                }
+                            ],
+                            "fullscore": 0,
+                            "minscore": -1000,
+                            "files": [
+                                "stdout",
+                                "stderr"
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": false,
+                            "showMemory": false
+                        }
+                    }
+                ]
+            },
+            {
+                "name": "[joj] ex2-asan",
+                "group": "joj",
+                "executor": {
+                    "name": "sandbox",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "./h7/build/ex2-asan",
+                                "-a"
+                            ],
+                            "env": [
+                                "PATH=/usr/bin:/bin:/usr/local/bin"
+                            ],
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 800000000000000
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 800000000000000
+                            },
+                            "cpuLimit": 1000000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 2000000000000000,
+                            "memoryLimit": 95656304705536,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {
+                                "h7/build/ex2": "h7/build/ex2",
+                                "h7/build/ex2-asan": "h7/build/ex2-asan",
+                                "h7/build/ex2-ubsan": "h7/build/ex2-ubsan",
+                                "h7/build/ex2-msan": "h7/build/ex2-msan",
+                                "h7/build/compile_commands.json": "h7/build/compile_commands.json"
+                            },
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": [
+                            {
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "stdin": {
+                                    "src": "/home/tt/./homework/h7/e2/case0.in",
+                                    "max": 419430400
+                                },
+                                "cpuLimit": 1000000000,
+                                "clockLimit": 2000000000,
+                                "memoryLimit": 95656304705536,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            },
+                            {
+                                "env": [
+                                    "PATH=/usr/bin:/bin:/usr/local/bin"
+                                ],
+                                "stdin": {
+                                    "src": "/home/tt/./homework/h7/e2/case1.in",
+                                    "max": 419430400
+                                },
+                                "cpuLimit": 1000000000,
+                                "clockLimit": 2000000000,
+                                "memoryLimit": 95656304705536,
+                                "procLimit": 50,
+                                "copyOut": [
+                                    "stdout",
+                                    "stderr"
+                                ]
+                            }
+                        ]
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "diff",
+                        "with": {
+                            "name": "diff",
+                            "cases": [
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 5,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/./homework/h7/e2/case0.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                },
+                                {
+                                    "outputs": [
+                                        {
+                                            "score": 5,
+                                            "fileName": "stdout",
+                                            "answerPath": "/home/tt/./homework/h7/e2/case1.out",
+                                            "forceQuitOnDiff": false,
+                                            "alwaysHide": false,
+                                            "compareSpace": false
+                                        }
+                                    ]
+                                }
+                            ]
+                        }
+                    },
+                    {
+                        "name": "result-detail",
+                        "with": {
+                            "score": 0,
+                            "comment": "",
+                            "showFiles": [
+                                "stderr"
+                            ],
+                            "showExitStatus": true,
+                            "showRuntime": true,
+                            "showMemory": true
+                        }
+                    }
+                ]
+            }
+        ],
+        "poststages": [
+            {
+                "name": "teapot",
+                "group": "",
+                "executor": {
+                    "name": "local",
+                    "with": {
+                        "default": {
+                            "args": [
+                                "/usr/local/bin/joint-teapot",
+                                "joj3-all-env",
+                                "/home/tt/.config/teapot/teapot.env",
+                                "--grading-repo-name",
+                                "Nuvole-joj",
+                                "--max-total-score",
+                                "100"
+                            ],
+                            "env": [
+                                "LOG_FILE_PATH=/home/tt/.cache/joint-teapot-debug.log"
+                            ],
+                            "stdin": {
+                                "content": "",
+                                "max": 419430400
+                            },
+                            "stdout": {
+                                "name": "stdout",
+                                "max": 4096
+                            },
+                            "stderr": {
+                                "name": "stderr",
+                                "max": 4096
+                            },
+                            "cpuLimit": 4000000000000,
+                            "realCpuLimit": 0,
+                            "clockLimit": 8000000000000,
+                            "memoryLimit": 838860800,
+                            "stackLimit": 0,
+                            "procLimit": 50,
+                            "cpuRateLimit": 0,
+                            "cpuSetLimit": "",
+                            "copyIn": {},
+                            "copyInCached": {},
+                            "copyInDir": ".",
+                            "copyOut": [
+                                "stdout",
+                                "stderr"
+                            ],
+                            "copyOutCached": [],
+                            "copyOutMax": 0,
+                            "copyOutDir": "",
+                            "tty": false,
+                            "strictMemoryLimit": false,
+                            "dataSegmentLimit": false,
+                            "addressSpaceLimit": false
+                        },
+                        "cases": []
+                    }
+                },
+                "parsers": [
+                    {
+                        "name": "log",
+                        "with": {
+                            "msg": "joj3 summary"
+                        }
+                    }
+                ]
+            }
+        ]
+    }
+}
diff --git a/tests/convert/keyword/task.toml b/tests/convert/keyword/task.toml
new file mode 100644
index 0000000..2dc7f07
--- /dev/null
+++ b/tests/convert/keyword/task.toml
@@ -0,0 +1,102 @@
+# general task configuration
+task.name = "hw7 ex2" # task name
+task.type = "homework/h7/e2" # remove this task type later
+
+release.deadline = 2024-12-30 23:59:59+08:00
+release.begin_time = 2024-12-29 23:59:59+08:00
+
+[[stages]]
+name = "Compilation"
+command = "./tools/compile" # eg. script running cmake commands
+files.import = [ "tools/compile" ]
+files.export = [ "h7/build/ex2", "h7/build/ex2-asan", "h7/build/ex2-ubsan", "h7/build/ex2-msan", "h7/build/compile_commands.json" ]
+score = 1
+
+# compile parsers
+parsers = [ "result-detail", "result-status" ]
+result-status.comment = "Congratulations! Your code compiled successfully."
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+result-status.forcequit = true
+
+[[stages]]
+name = "[cq] Filelength"
+command = "./tools/filelength 400 300 *.cpp *.h"
+files.import = [ "tools/filelength" ]
+
+parsers = [ "keyword", "result-detail" ]
+keyword.keyword = [ "max", "recommended"]
+keyword.weight = [ 20, 10 ]
+result-detail.exitstatus = true
+result-detail.stdout = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Clang-tidy"
+command = "run-clang-tidy-18 -header-filter=.* -quiet -load=/usr/local/lib/libcodequality.so -p h7/build h7/ex2.cpp"
+files.import = [ "tests/homework/h7/.clang-tidy", "h7/build/compile_commands.json" ]
+limit.stdout = 65
+
+parsers = [ "clangtidy", "result-detail" ]
+clangtidy.keyword = [ "codequality-unchecked-malloc-result", "codequality-no-global-variables", "codequality-no-header-guard", "codequality-no-fflush-stdin", "readability-function-size", "readability-duplicate-include", "readability-identifier-naming", "readability-redundant", "readability-misleading-indentation", "readability-misplaced-array-index", "cppcoreguidelines-init-variables", "bugprone-suspicious-string-compare", "google-global-names-in-headers", "clang-diagnostic", "clang-analyzer", "misc", "performance", "portability" ]
+clangtidy.weight = [ 5, 20, 20, 20, 10, 5, 5, 5, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5]
+result-detail.exitstatus = true
+result-detail.stdout = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Cppcheck"
+command = "cppcheck --template='{\"file\":\"{file}\",\"line\":{line}, \"column\":{column}, \"severity\":\"{severity}\", \"message\":\"{message}\", \"id\":\"{id}\"}' --force --enable=all --suppress=missingIncludeSystem  --quiet h7/ex2.cpp"
+limit.stderr = 65
+
+parsers = [ "cppcheck", "result-detail" ]
+cppcheck.keyword = ["error", "warning", "portability", "performance", "style"]
+cppcheck.weight = [15, 5, 5, 5, 5]
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[cq] Cpplint"
+command = "cpplint --linelength=120 --filter=-legal,-readability/casting,-whitespace,-runtime/printf,-runtime/threadsafe_fn,-runtime/int,-readability/todo,-build/include_subdir,-build/header_guard,-build/include_what_you_use --recursive --exclude=build h7/ex2.cpp"
+limit.stdout = 65
+
+parsers = [ "cpplint", "result-detail" ]
+cpplint.keyword = [ "runtime", "readability", "build" ]
+cpplint.weight = [ 5, 20, 10]
+result-detail.exitstatus = true
+result-detail.stderr = true
+result-detail.time = false
+result-detail.mem = false
+
+[[stages]]
+name = "[joj] ex2-asan"
+command="./h7/build/ex2-asan -a"
+files.import = [ "h7/build/ex2-asan" ]
+limit.mem = 91224961
+
+parsers = [ "diff", "result-detail" ]
+result-detail.exitstatus = true
+result-detail.stderr = true
+
+# will be removed as long as the name is fixed
+case0.diff.output.score = 5
+case0.limit.cpu = 1
+case0.limit.mem = 91224961
+case0.diff.output.ignorespaces = true
+#case0.limit.stdout = 8
+#case0.command = "./h7/build/ex2"
+case0.in = "case0.in"
+
+case1.diff.output.score = 5
+case1.limit.cpu = 1
+case1.limit.mem = 91224961
+case1.diff.output.ignorespaces = true
+#case1.limit.stdout = 8
+#case1.command = "./h7/build/ex2"
+case1.in = "case1.in"
diff --git a/tests/convert/test_convert_cases.py b/tests/convert/test_convert_cases.py
index 1a3392a..94d83d4 100644
--- a/tests/convert/test_convert_cases.py
+++ b/tests/convert/test_convert_cases.py
@@ -3,3 +3,23 @@ from tests.convert.utils import load_case
 
 def test_basic() -> None:
     load_case("basic")
+
+
+def test_clang_tidy() -> None:
+    load_case("clang-tidy")
+
+
+def test_cppcheck() -> None:
+    load_case("cppcheck")
+
+
+def test_cpplint() -> None:
+    load_case("cpplint")
+
+
+def test_diff() -> None:
+    load_case("diff")
+
+
+def test_keyword() -> None:
+    load_case("keyword")