)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"994bae026cd0f5784b2a466a026363913946e533","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"59ba3764_1ce3fc9f","updated":"2026-05-26 09:08:44.000000000","message":"Hi, can u please review this tiny fix ?","commit_id":"032c42a36824e7c2e6e77d6e13405e81384779cc"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"71995b85c7f705fe414aa981a4e078a44bc1768b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"0e6eec04_66e91c60","updated":"2026-05-26 09:33:54.000000000","message":"Please add a unit test that replicates the current issue","commit_id":"032c42a36824e7c2e6e77d6e13405e81384779cc"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"2f988ef3efd51613740b1a6f9a3de1d3980bc094","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"8c612f7a_50f2eecc","updated":"2026-05-25 23:25:25.000000000","message":"recheck unrelated","commit_id":"032c42a36824e7c2e6e77d6e13405e81384779cc"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"d58516b27df4e5b0b5806ef278d2b32f30c72132","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"303cf1ae_cae64aee","in_reply_to":"0e6eec04_66e91c60","updated":"2026-05-26 14:33:09.000000000","message":"Done","commit_id":"032c42a36824e7c2e6e77d6e13405e81384779cc"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"6ff7371c95a5de19e5c992019e6335918e6468ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c4b78a07_8644b8ff","in_reply_to":"303cf1ae_cae64aee","updated":"2026-06-01 11:22:46.000000000","message":"Unit tests added.","commit_id":"032c42a36824e7c2e6e77d6e13405e81384779cc"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"b8edd7ef60ae0f3feab5a21b210f1c882edbc140","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c176239a_35c64fd1","updated":"2026-06-04 09:38:12.000000000","message":"I think this can be merged, anything missing ?","commit_id":"76374b752f4030199e96ae20d7b4af934daf7039"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"b6d7d248f52785194d23d14fefa2a2587a460b1a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"c185865e_75940b89","updated":"2026-06-08 08:33:19.000000000","message":"Ping ?","commit_id":"76374b752f4030199e96ae20d7b4af934daf7039"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"a9cd1e9bbd38cee1a1d1fc10199e692e45e0daf6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":8,"id":"e7373497_a14b8455","updated":"2026-06-15 14:26:31.000000000","message":"There are no tests for 3 digit (e.g. 755) and 4 digit (e.g. sticky bit 1777) permissions - might be useful if we ever break that","commit_id":"76374b752f4030199e96ae20d7b4af934daf7039"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"ed087883c9ad3a8c99d9fe53c78856e458f3ba70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"72099ca7_b40b09fa","in_reply_to":"e7373497_a14b8455","updated":"2026-06-25 16:23:25.000000000","message":"Reworked tests with helper, now covered.","commit_id":"76374b752f4030199e96ae20d7b4af934daf7039"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"99d527128f1bfef2eff565964d658f19e8e94a18","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"bce7491e_509d761c","updated":"2026-06-22 14:14:25.000000000","message":"recheck - CI fixed now","commit_id":"0cf899d14b3b86990da592b86e9623b12b97d6d3"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"f2e818b0203b5dfcf037b8c36a6a55d871a650ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"8aa0bf18_dac28d5b","updated":"2026-07-01 15:51:19.000000000","message":"Looks good, but I think it\u0027s worth addressing Frickler\u0027s comments quickly.","commit_id":"5995a08ab50fcd17fbcf2633a968d2b205e8da8e"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"823337b2ad2ff6c08fe340ee82ec29429730a804","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"db589664_94232fd5","updated":"2026-06-26 08:29:05.000000000","message":"ready","commit_id":"5995a08ab50fcd17fbcf2633a968d2b205e8da8e"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"579614b7935df94b55dbbaa48512d55bd41a8e40","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"6e8691a9_7cd8e8a2","updated":"2026-06-29 13:02:20.000000000","message":"waiting for something ? can u review again please ?","commit_id":"5995a08ab50fcd17fbcf2633a968d2b205e8da8e"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"d1865dd114720ec21b3055d13d1b126b05d38080","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"02a4ae57_042f0317","updated":"2026-07-02 09:46:16.000000000","message":"recheck galaxy issues?","commit_id":"505428fd51f3801c39850437f908fcf106a8fc94"}],"docker/base/set_configs.py":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"f82bb9fe190beea4d09f1d2a10ca0c68c5e6a73b","unresolved":true,"context_lines":[{"line_number":417,"context_line":"                if re.fullmatch(r\u0027\\d{3,4}\u0027, perm):"},{"line_number":418,"context_line":"                    perm \u003d int(perm, 8)"},{"line_number":419,"context_line":"                else:"},{"line_number":420,"context_line":"                    perm \u003d int(perm, 0)"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"                # Ensure execute bit on directory if read bit is set"},{"line_number":423,"context_line":"                if os.path.isdir(path):"}],"source_content_type":"text/x-python","patch_set":13,"id":"eddb4b16_5daa1293","line":420,"updated":"2026-07-01 11:21:28.000000000","message":"I think this should do some further sanity checks. like if I typo `66` instead of e.g. `660`, this will be treated as decimal, applying `0o102` as permission. so instead create an error for len\u003c3 and also for len\u003e4 and not prefixed by `0o`?","commit_id":"5995a08ab50fcd17fbcf2633a968d2b205e8da8e"},{"author":{"_account_id":17669,"name":"Doug Szumski","email":"doug@stackhpc.com","username":"DougSzumski"},"change_message_id":"f2e818b0203b5dfcf037b8c36a6a55d871a650ce","unresolved":true,"context_lines":[{"line_number":417,"context_line":"                if re.fullmatch(r\u0027\\d{3,4}\u0027, perm):"},{"line_number":418,"context_line":"                    perm \u003d int(perm, 8)"},{"line_number":419,"context_line":"                else:"},{"line_number":420,"context_line":"                    perm \u003d int(perm, 0)"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"                # Ensure execute bit on directory if read bit is set"},{"line_number":423,"context_line":"                if os.path.isdir(path):"}],"source_content_type":"text/x-python","patch_set":13,"id":"f71d136f_f5d16339","line":420,"in_reply_to":"eddb4b16_5daa1293","updated":"2026-07-01 15:51:19.000000000","message":"It\u0027s a good point and trivial to address (even though it\u0027s not strictly in the scope of the bug).","commit_id":"5995a08ab50fcd17fbcf2633a968d2b205e8da8e"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"673cf5cec84d860be84332f3b4402f253cb365bd","unresolved":false,"context_lines":[{"line_number":417,"context_line":"                if re.fullmatch(r\u0027\\d{3,4}\u0027, perm):"},{"line_number":418,"context_line":"                    perm \u003d int(perm, 8)"},{"line_number":419,"context_line":"                else:"},{"line_number":420,"context_line":"                    perm \u003d int(perm, 0)"},{"line_number":421,"context_line":""},{"line_number":422,"context_line":"                # Ensure execute bit on directory if read bit is set"},{"line_number":423,"context_line":"                if os.path.isdir(path):"}],"source_content_type":"text/x-python","patch_set":13,"id":"22e376df_c13e20ea","line":420,"in_reply_to":"f71d136f_f5d16339","updated":"2026-07-01 16:15:36.000000000","message":"Done","commit_id":"5995a08ab50fcd17fbcf2633a968d2b205e8da8e"}],"tests/test_set_config.py":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"a9cd1e9bbd38cee1a1d1fc10199e692e45e0daf6","unresolved":true,"context_lines":[{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"    @mock.patch(\u0027os.chmod\u0027)"},{"line_number":1051,"context_line":"    @mock.patch(\u0027os.chown\u0027)"},{"line_number":1052,"context_line":"    @mock.patch(\u0027os.path.isdir\u0027, return_value\u003dTrue)"},{"line_number":1053,"context_line":"    @mock.patch(\u0027os.path.exists\u0027, return_value\u003dTrue)"},{"line_number":1054,"context_line":"    @mock.patch(\u0027glob.glob\u0027)"},{"line_number":1055,"context_line":"    @mock.patch(\u0027grp.getgrnam\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"723f61b3_a8495609","line":1052,"updated":"2026-06-15 14:26:31.000000000","message":"Unused?","commit_id":"76374b752f4030199e96ae20d7b4af934daf7039"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"ed087883c9ad3a8c99d9fe53c78856e458f3ba70","unresolved":false,"context_lines":[{"line_number":1049,"context_line":""},{"line_number":1050,"context_line":"    @mock.patch(\u0027os.chmod\u0027)"},{"line_number":1051,"context_line":"    @mock.patch(\u0027os.chown\u0027)"},{"line_number":1052,"context_line":"    @mock.patch(\u0027os.path.isdir\u0027, return_value\u003dTrue)"},{"line_number":1053,"context_line":"    @mock.patch(\u0027os.path.exists\u0027, return_value\u003dTrue)"},{"line_number":1054,"context_line":"    @mock.patch(\u0027glob.glob\u0027)"},{"line_number":1055,"context_line":"    @mock.patch(\u0027grp.getgrnam\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"c0762cff_ce07fe62","line":1052,"in_reply_to":"723f61b3_a8495609","updated":"2026-06-25 16:23:25.000000000","message":"reworked","commit_id":"76374b752f4030199e96ae20d7b4af934daf7039"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"a9cd1e9bbd38cee1a1d1fc10199e692e45e0daf6","unresolved":true,"context_lines":[{"line_number":1092,"context_line":""},{"line_number":1093,"context_line":"    @mock.patch(\u0027os.chmod\u0027)"},{"line_number":1094,"context_line":"    @mock.patch(\u0027os.chown\u0027)"},{"line_number":1095,"context_line":"    @mock.patch(\u0027os.path.isdir\u0027, return_value\u003dTrue)"},{"line_number":1096,"context_line":"    @mock.patch(\u0027os.path.exists\u0027, return_value\u003dTrue)"},{"line_number":1097,"context_line":"    @mock.patch(\u0027glob.glob\u0027)"},{"line_number":1098,"context_line":"    @mock.patch(\u0027grp.getgrnam\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"a1955c84_20eb98e8","line":1095,"updated":"2026-06-15 14:26:31.000000000","message":"ditto?","commit_id":"76374b752f4030199e96ae20d7b4af934daf7039"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"ed087883c9ad3a8c99d9fe53c78856e458f3ba70","unresolved":false,"context_lines":[{"line_number":1092,"context_line":""},{"line_number":1093,"context_line":"    @mock.patch(\u0027os.chmod\u0027)"},{"line_number":1094,"context_line":"    @mock.patch(\u0027os.chown\u0027)"},{"line_number":1095,"context_line":"    @mock.patch(\u0027os.path.isdir\u0027, return_value\u003dTrue)"},{"line_number":1096,"context_line":"    @mock.patch(\u0027os.path.exists\u0027, return_value\u003dTrue)"},{"line_number":1097,"context_line":"    @mock.patch(\u0027glob.glob\u0027)"},{"line_number":1098,"context_line":"    @mock.patch(\u0027grp.getgrnam\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"2ce5a351_4b380cbc","line":1095,"in_reply_to":"a1955c84_20eb98e8","updated":"2026-06-25 16:23:25.000000000","message":"reworked","commit_id":"76374b752f4030199e96ae20d7b4af934daf7039"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"f82bb9fe190beea4d09f1d2a10ca0c68c5e6a73b","unresolved":true,"context_lines":[{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"    def test_handle_permissions_accepts_python_octal_notation(self):"},{"line_number":1162,"context_line":"        \"\"\"Test Python octal permission notation.\"\"\""},{"line_number":1163,"context_line":"        self._assert_permission(\u00270o2775\u0027, 0o2775)"},{"line_number":1164,"context_line":""},{"line_number":1165,"context_line":"    def test_handle_permissions_adds_execute_bits_for_directories(self):"},{"line_number":1166,"context_line":"        \"\"\"Test execute bits are added to readable directories.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"d1fd875f_6d9152d2","line":1163,"updated":"2026-07-01 11:21:28.000000000","message":"also add a non-extended test case for completeness? like `0o755`","commit_id":"5995a08ab50fcd17fbcf2633a968d2b205e8da8e"},{"author":{"_account_id":27339,"name":"Michal Arbet","email":"michal.arbet@ultimum.io","username":"michalarbet"},"change_message_id":"673cf5cec84d860be84332f3b4402f253cb365bd","unresolved":false,"context_lines":[{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"    def test_handle_permissions_accepts_python_octal_notation(self):"},{"line_number":1162,"context_line":"        \"\"\"Test Python octal permission notation.\"\"\""},{"line_number":1163,"context_line":"        self._assert_permission(\u00270o2775\u0027, 0o2775)"},{"line_number":1164,"context_line":""},{"line_number":1165,"context_line":"    def test_handle_permissions_adds_execute_bits_for_directories(self):"},{"line_number":1166,"context_line":"        \"\"\"Test execute bits are added to readable directories.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"ef0ae9bc_c3d28715","line":1163,"in_reply_to":"d1fd875f_6d9152d2","updated":"2026-07-01 16:15:36.000000000","message":"Done - moved to common test with map of permissions","commit_id":"5995a08ab50fcd17fbcf2633a968d2b205e8da8e"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"b331a89ddff490b27e51b3efce54b8d393adfac3","unresolved":false,"context_lines":[{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"    def test_handle_permissions_accepts_python_octal_notation(self):"},{"line_number":1162,"context_line":"        \"\"\"Test Python octal permission notation.\"\"\""},{"line_number":1163,"context_line":"        self._assert_permission(\u00270o2775\u0027, 0o2775)"},{"line_number":1164,"context_line":""},{"line_number":1165,"context_line":"    def test_handle_permissions_adds_execute_bits_for_directories(self):"},{"line_number":1166,"context_line":"        \"\"\"Test execute bits are added to readable directories.\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"a9aa8b5a_3caea2ce","line":1163,"in_reply_to":"ef0ae9bc_c3d28715","updated":"2026-07-01 19:59:49.000000000","message":"you could likely drop this test completely, then? but not a blocker","commit_id":"5995a08ab50fcd17fbcf2633a968d2b205e8da8e"}]}
