)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"ca508dc735d38a7b6bb8dac1db20cce0b9c9b0e6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"cf5c801d_0e42b9ca","updated":"2024-03-27 18:37:57.000000000","message":"Is there an option today to pass a value/label per cluster - or do we just enforce the default from config?","commit_id":"d9accedbd0f44ff1dcce3d65d7c27484d79e94db"},{"author":{"_account_id":35260,"name":"Tyler","email":"tyler@stackhpc.com","username":"scrungus"},"change_message_id":"25645359077fab74fa9b5e36a98ccaa2e848ae16","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"ba5880de_99b19a7e","in_reply_to":"cf5c801d_0e42b9ca","updated":"2024-03-28 12:44:47.000000000","message":"Good point, I\u0027ve added the option to pass a label per cluster / in cluster templates, and allowed configuration of the default value via config","commit_id":"d9accedbd0f44ff1dcce3d65d7c27484d79e94db"},{"author":{"_account_id":33467,"name":"Matt Pryor","email":"matt@stackhpc.com","username":"mkjpryor"},"change_message_id":"f0191ce67ad8613549f76a988dd9e00732f8930d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"0b40ce90_c04704ff","updated":"2024-04-04 09:58:53.000000000","message":"I think we should make this volume AZ specific","commit_id":"82d47682fea656338ad401d276afc94fde3f5d54"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"3c33f07a5f83ca30c109f5ab2966bcec90fa1e88","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"ebfeb252_36099535","updated":"2024-04-09 11:04:07.000000000","message":"@MattP are you sure this is correct BTW? Don\u0027t we want to default to having no AZ set on the cinder volumes?","commit_id":"e66a91149d2331825f8815c35430b191ead690e6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c84ddc99a6c688c3615a4e1676e6d8764b85c5d3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"63c841b2_f8517ca3","updated":"2024-04-09 11:16:18.000000000","message":"OK, I get the reason now, Cinder CSI defaults to nova, so we need to be able to tweak this one:\nhttps://github.com/kubernetes/cloud-provider-openstack/blob/master/docs/cinder-csi-plugin/using-cinder-csi-plugin.md#supported-parameters","commit_id":"e66a91149d2331825f8815c35430b191ead690e6"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2e3e00ed952bc9e9127f11dd607a9612046f0abb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"018e58a6_cd4b6a1c","updated":"2024-04-09 16:25:42.000000000","message":"I feel too involved to +2 this now, but adding my +1 to show I think this is good now.","commit_id":"cc89e48141b599880a3eae899bf2e31c4710723c"}],"magnum_capi_helm/driver.py":[{"author":{"_account_id":36412,"name":"Scott Davidson","email":"sdavidson327@gmail.com","username":"sd109"},"change_message_id":"d84c8ea97358f20484635c15d6f2cf669b8bc7ef","unresolved":true,"context_lines":[{"line_number":486,"context_line":"            return default"},{"line_number":487,"context_line":"    "},{"line_number":488,"context_line":"    def _get_availability_zone(self,cluster):"},{"line_number":489,"context_line":"        return self._get_label_bool(cluster, \"availability_zone\", CONF.capi_helm.csi_cinder_availability_zone)"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def _get_chart_version(self, cluster):"},{"line_number":492,"context_line":"        version \u003d cluster.cluster_template.labels.get("}],"source_content_type":"text/x-python","patch_set":6,"id":"c80985ae_9b081573","line":489,"updated":"2024-04-02 08:14:50.000000000","message":"Shouldn\u0027t this be self._label instead of self._get_label_bool?","commit_id":"be3ad8267a564e9538f9a1452ea7acf0a5974cf2"},{"author":{"_account_id":35260,"name":"Tyler","email":"tyler@stackhpc.com","username":"scrungus"},"change_message_id":"07ec6cf0439ae4a8a2c86f3727d74f0a51db76c1","unresolved":false,"context_lines":[{"line_number":486,"context_line":"            return default"},{"line_number":487,"context_line":"    "},{"line_number":488,"context_line":"    def _get_availability_zone(self,cluster):"},{"line_number":489,"context_line":"        return self._get_label_bool(cluster, \"availability_zone\", CONF.capi_helm.csi_cinder_availability_zone)"},{"line_number":490,"context_line":""},{"line_number":491,"context_line":"    def _get_chart_version(self, cluster):"},{"line_number":492,"context_line":"        version \u003d cluster.cluster_template.labels.get("}],"source_content_type":"text/x-python","patch_set":6,"id":"51c31cc1_7fbbd30d","line":489,"in_reply_to":"c80985ae_9b081573","updated":"2024-04-02 15:57:20.000000000","message":"Done","commit_id":"be3ad8267a564e9538f9a1452ea7acf0a5974cf2"},{"author":{"_account_id":33467,"name":"Matt Pryor","email":"matt@stackhpc.com","username":"mkjpryor"},"change_message_id":"f0191ce67ad8613549f76a988dd9e00732f8930d","unresolved":true,"context_lines":[{"line_number":490,"context_line":"            cluster,"},{"line_number":491,"context_line":"            \"availability_zone\","},{"line_number":492,"context_line":"            CONF.capi_helm.csi_cinder_availability_zone,"},{"line_number":493,"context_line":"        )"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def _get_chart_version(self, cluster):"},{"line_number":496,"context_line":"        version \u003d cluster.cluster_template.labels.get("}],"source_content_type":"text/x-python","patch_set":11,"id":"b86b2e70_73f3fade","line":493,"updated":"2024-04-04 09:58:53.000000000","message":"Should this method, and the corresponding label, be specifically for the volume AZ? Maybe the name of the label should match the name of the config option, i.e. `csi_cinder_availability_zone`?\n\nWe may want to add additional support around compute AZs in the future and this could be confusing.","commit_id":"82d47682fea656338ad401d276afc94fde3f5d54"},{"author":{"_account_id":33467,"name":"Matt Pryor","email":"matt@stackhpc.com","username":"mkjpryor"},"change_message_id":"b3d55f54819039b71ab733aef5cd26a023ccfe09","unresolved":false,"context_lines":[{"line_number":490,"context_line":"            cluster,"},{"line_number":491,"context_line":"            \"availability_zone\","},{"line_number":492,"context_line":"            CONF.capi_helm.csi_cinder_availability_zone,"},{"line_number":493,"context_line":"        )"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def _get_chart_version(self, cluster):"},{"line_number":496,"context_line":"        version \u003d cluster.cluster_template.labels.get("}],"source_content_type":"text/x-python","patch_set":11,"id":"17b3e5cf_692dc49a","line":493,"in_reply_to":"b86b2e70_73f3fade","updated":"2024-04-05 15:13:02.000000000","message":"Done","commit_id":"82d47682fea656338ad401d276afc94fde3f5d54"},{"author":{"_account_id":33467,"name":"Matt Pryor","email":"matt@stackhpc.com","username":"mkjpryor"},"change_message_id":"b3d55f54819039b71ab733aef5cd26a023ccfe09","unresolved":false,"context_lines":[{"line_number":490,"context_line":"            cluster,"},{"line_number":491,"context_line":"            \"availability_zone\","},{"line_number":492,"context_line":"            CONF.capi_helm.csi_cinder_availability_zone,"},{"line_number":493,"context_line":"        )"},{"line_number":494,"context_line":""},{"line_number":495,"context_line":"    def _get_chart_version(self, cluster):"},{"line_number":496,"context_line":"        version \u003d cluster.cluster_template.labels.get("}],"source_content_type":"text/x-python","patch_set":11,"id":"f58e99f8_8cf5e362","line":493,"in_reply_to":"b86b2e70_73f3fade","updated":"2024-04-05 15:13:02.000000000","message":"Done","commit_id":"82d47682fea656338ad401d276afc94fde3f5d54"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"c7364a5701a6c64017c43c11c37b5c723cb1f92e","unresolved":true,"context_lines":[{"line_number":464,"context_line":"            return default"},{"line_number":465,"context_line":"        raw \u003d all_labels.get(key, default)"},{"line_number":466,"context_line":"        # NOTE(johngarbutt): filtering untrusted user input"},{"line_number":467,"context_line":"        return re.sub(r\"[^a-zA-Z0-9\\._\\-\\/ ]+\", \"\", raw)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"    def _get_label_bool(self, cluster, label, default):"},{"line_number":470,"context_line":"        cluster_label \u003d self._label(cluster, label, \"\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"4d34490b_ce27e0fa","line":467,"updated":"2024-04-09 10:04:59.000000000","message":"Can we add to the note in earlier line what do we want to filter out so it’s sort of logical to use this regex?","commit_id":"3a9580a0159559a168a544c15d39eeb4d77a5fbc"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"afdef0bb2bb2c7ab0707b3300a03434774721227","unresolved":true,"context_lines":[{"line_number":464,"context_line":"            return default"},{"line_number":465,"context_line":"        raw \u003d all_labels.get(key, default)"},{"line_number":466,"context_line":"        # NOTE(johngarbutt): filtering untrusted user input"},{"line_number":467,"context_line":"        return re.sub(r\"[^a-zA-Z0-9\\._\\-\\/ ]+\", \"\", raw)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"    def _get_label_bool(self, cluster, label, default):"},{"line_number":470,"context_line":"        cluster_label \u003d self._label(cluster, label, \"\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"b799d5d4_17ba462f","line":467,"in_reply_to":"4d34490b_ce27e0fa","updated":"2024-04-09 11:00:56.000000000","message":"Hmm, so we have a problem here...\n\nThe first version of this code was using jinja to template out some yaml files, and in that version of the world, this escaping was to ensure we produced valid yaml, so it stuck here.\n\nNow in the current version of the code, will build up a python dictionary and convert it to YAML, which should be safe enough, or if its not, its a python bug. Although, this clearly is user input, so we should be careful here.\n\nSome of these things go into Kubernetes label names, via the helm chart values, and in those cases, we don\u0027t want underscores.\n\nThe problem you are hitting is that valid values for cinder az names are a larger set than are valid in the above case.\n\nI think the correct thing to do here is have an optional parameter for allowed characters, that defaults to the current value, which we can call something like SAFE_FOR_K8S_LABLE_NAMES or something like that.\n\nIn your case you should override that to something like SAFE_FOR_CINDER_AZS I guess?","commit_id":"3a9580a0159559a168a544c15d39eeb4d77a5fbc"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"52714bb1388554562a4c517c8acfbc8cb04640c1","unresolved":false,"context_lines":[{"line_number":464,"context_line":"            return default"},{"line_number":465,"context_line":"        raw \u003d all_labels.get(key, default)"},{"line_number":466,"context_line":"        # NOTE(johngarbutt): filtering untrusted user input"},{"line_number":467,"context_line":"        return re.sub(r\"[^a-zA-Z0-9\\._\\-\\/ ]+\", \"\", raw)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"    def _get_label_bool(self, cluster, label, default):"},{"line_number":470,"context_line":"        cluster_label \u003d self._label(cluster, label, \"\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"2f5f6111_1f7bda0f","line":467,"in_reply_to":"52281ede_8d7f250f","updated":"2024-04-09 17:08:18.000000000","message":"Done","commit_id":"3a9580a0159559a168a544c15d39eeb4d77a5fbc"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8830d5a1c9e8ec79aa699e7ce90053db662e70c5","unresolved":true,"context_lines":[{"line_number":464,"context_line":"            return default"},{"line_number":465,"context_line":"        raw \u003d all_labels.get(key, default)"},{"line_number":466,"context_line":"        # NOTE(johngarbutt): filtering untrusted user input"},{"line_number":467,"context_line":"        return re.sub(r\"[^a-zA-Z0-9\\._\\-\\/ ]+\", \"\", raw)"},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"    def _get_label_bool(self, cluster, label, default):"},{"line_number":470,"context_line":"        cluster_label \u003d self._label(cluster, label, \"\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"52281ede_8d7f250f","line":467,"in_reply_to":"b799d5d4_17ba462f","updated":"2024-04-09 16:23:35.000000000","message":"OK, this was an unrelated change, so I have removed this for now. Lets add that as a separate change with appropriate commit message justification, and","commit_id":"3a9580a0159559a168a544c15d39eeb4d77a5fbc"}],"magnum_capi_helm/tests/test_driver.py":[{"author":{"_account_id":36412,"name":"Scott Davidson","email":"sdavidson327@gmail.com","username":"sd109"},"change_message_id":"d53d4c89853b3773b688ccf150329bf6e614217b","unresolved":true,"context_lines":[{"line_number":1959,"context_line":""},{"line_number":1960,"context_line":"    @mock.patch(\"magnum.common.clients.OpenStackClients.cinder_region_name\")"},{"line_number":1961,"context_line":"    @mock.patch(\"magnum.common.clients.OpenStackClients.cinder\")"},{"line_number":1962,"context_line":"    def test_get_storage_classes(self, mock_cinder, mock_osc_rn):"},{"line_number":1963,"context_line":"        CONF.capi_helm.csi_cinder_default_volume_type \u003d \"type3\""},{"line_number":1964,"context_line":"        CONF.capi_helm.csi_cinder_availability_zone \u003d \"middle_earth_east\""},{"line_number":1965,"context_line":"        mock_vol_type_1 \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"5bb7e5c0_58600dfa","line":1962,"updated":"2024-03-26 14:27:07.000000000","message":"Nit: You should be able to remove the `mock_osc_rn` arg and the corresponding @mock.patch since they\u0027re no longer used.","commit_id":"bce477ce4c7a9457b657769299360ff883591e0e"},{"author":{"_account_id":35260,"name":"Tyler","email":"tyler@stackhpc.com","username":"scrungus"},"change_message_id":"25645359077fab74fa9b5e36a98ccaa2e848ae16","unresolved":false,"context_lines":[{"line_number":1959,"context_line":""},{"line_number":1960,"context_line":"    @mock.patch(\"magnum.common.clients.OpenStackClients.cinder_region_name\")"},{"line_number":1961,"context_line":"    @mock.patch(\"magnum.common.clients.OpenStackClients.cinder\")"},{"line_number":1962,"context_line":"    def test_get_storage_classes(self, mock_cinder, mock_osc_rn):"},{"line_number":1963,"context_line":"        CONF.capi_helm.csi_cinder_default_volume_type \u003d \"type3\""},{"line_number":1964,"context_line":"        CONF.capi_helm.csi_cinder_availability_zone \u003d \"middle_earth_east\""},{"line_number":1965,"context_line":"        mock_vol_type_1 \u003d mock.MagicMock()"}],"source_content_type":"text/x-python","patch_set":3,"id":"3cd422b6_a293ebbd","line":1962,"in_reply_to":"5bb7e5c0_58600dfa","updated":"2024-03-28 12:44:47.000000000","message":"Done","commit_id":"bce477ce4c7a9457b657769299360ff883591e0e"},{"author":{"_account_id":36412,"name":"Scott Davidson","email":"sdavidson327@gmail.com","username":"sd109"},"change_message_id":"83677a7c47091f7922966c0cffdfc06b7a5a8b1e","unresolved":true,"context_lines":[{"line_number":2023,"context_line":""},{"line_number":2024,"context_line":"    @mock.patch(\"magnum.common.clients.OpenStackClients.cinder\")"},{"line_number":2025,"context_line":"    def test_get_storage_class_volume_type_not_defined("},{"line_number":2026,"context_line":"        self, mock_cinder, mock_osc_rn"},{"line_number":2027,"context_line":"    ):"},{"line_number":2028,"context_line":"        CONF.capi_helm.csi_cinder_default_volume_type \u003d None"},{"line_number":2029,"context_line":"        CONF.capi_helm.csi_cinder_availability_zone \u003d \"middle_earth_east\""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a44da1d_c3e196e9","line":2026,"updated":"2024-03-27 15:55:46.000000000","message":"Missed one, should fix the failing test.","commit_id":"d9accedbd0f44ff1dcce3d65d7c27484d79e94db"},{"author":{"_account_id":35260,"name":"Tyler","email":"tyler@stackhpc.com","username":"scrungus"},"change_message_id":"25645359077fab74fa9b5e36a98ccaa2e848ae16","unresolved":false,"context_lines":[{"line_number":2023,"context_line":""},{"line_number":2024,"context_line":"    @mock.patch(\"magnum.common.clients.OpenStackClients.cinder\")"},{"line_number":2025,"context_line":"    def test_get_storage_class_volume_type_not_defined("},{"line_number":2026,"context_line":"        self, mock_cinder, mock_osc_rn"},{"line_number":2027,"context_line":"    ):"},{"line_number":2028,"context_line":"        CONF.capi_helm.csi_cinder_default_volume_type \u003d None"},{"line_number":2029,"context_line":"        CONF.capi_helm.csi_cinder_availability_zone \u003d \"middle_earth_east\""}],"source_content_type":"text/x-python","patch_set":4,"id":"ce8747aa_62784fa1","line":2026,"in_reply_to":"5a44da1d_c3e196e9","updated":"2024-03-28 12:44:47.000000000","message":"Done","commit_id":"d9accedbd0f44ff1dcce3d65d7c27484d79e94db"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"8830d5a1c9e8ec79aa699e7ce90053db662e70c5","unresolved":true,"context_lines":[{"line_number":1988,"context_line":"            \"type3\", storage_classes[\"defaultStorageClass\"][\"volumeType\"]"},{"line_number":1989,"context_line":"        )"},{"line_number":1990,"context_line":"        self.assertEqual("},{"line_number":1991,"context_line":"            \"middleeartheast\","},{"line_number":1992,"context_line":"            storage_classes[\"additionalStorageClasses\"][0][\"availabilityZone\"],"},{"line_number":1993,"context_line":"        )"},{"line_number":1994,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"9242fa3b_52900999","line":1991,"updated":"2024-04-09 16:23:35.000000000","message":"OK, this is enough to make the unit tests pass with the current escaping, although its a bit odd in context to truncate the configured AZ like this.","commit_id":"cc89e48141b599880a3eae899bf2e31c4710723c"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"52714bb1388554562a4c517c8acfbc8cb04640c1","unresolved":false,"context_lines":[{"line_number":1988,"context_line":"            \"type3\", storage_classes[\"defaultStorageClass\"][\"volumeType\"]"},{"line_number":1989,"context_line":"        )"},{"line_number":1990,"context_line":"        self.assertEqual("},{"line_number":1991,"context_line":"            \"middleeartheast\","},{"line_number":1992,"context_line":"            storage_classes[\"additionalStorageClasses\"][0][\"availabilityZone\"],"},{"line_number":1993,"context_line":"        )"},{"line_number":1994,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"28b22f63_a882f9bc","line":1991,"in_reply_to":"67a14948_650475ad","updated":"2024-04-09 17:08:18.000000000","message":"Done","commit_id":"cc89e48141b599880a3eae899bf2e31c4710723c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"56695456e58e49787e0190ab9dd939ac499c18e7","unresolved":true,"context_lines":[{"line_number":1988,"context_line":"            \"type3\", storage_classes[\"defaultStorageClass\"][\"volumeType\"]"},{"line_number":1989,"context_line":"        )"},{"line_number":1990,"context_line":"        self.assertEqual("},{"line_number":1991,"context_line":"            \"middleeartheast\","},{"line_number":1992,"context_line":"            storage_classes[\"additionalStorageClasses\"][0][\"availabilityZone\"],"},{"line_number":1993,"context_line":"        )"},{"line_number":1994,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"67a14948_650475ad","line":1991,"in_reply_to":"9242fa3b_52900999","updated":"2024-04-09 16:24:11.000000000","message":"If we want to change the label escaping, I think we should do that in a separate patch.","commit_id":"cc89e48141b599880a3eae899bf2e31c4710723c"}],"tox.ini":[{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"c7364a5701a6c64017c43c11c37b5c723cb1f92e","unresolved":true,"context_lines":[{"line_number":11,"context_line":"   OS_STDOUT_CAPTURE\u003d1"},{"line_number":12,"context_line":"   OS_STDERR_CAPTURE\u003d1"},{"line_number":13,"context_line":"   OS_TEST_TIMEOUT\u003d60"},{"line_number":14,"context_line":"deps \u003d -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}"},{"line_number":15,"context_line":"       -r{toxinidir}/requirements.txt"},{"line_number":16,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":17,"context_line":"commands \u003d stestr run {posargs}"}],"source_content_type":"text/x-properties","patch_set":13,"id":"7abcf79e_32562635","line":14,"updated":"2024-04-09 10:04:59.000000000","message":"that should be a separate change","commit_id":"3a9580a0159559a168a544c15d39eeb4d77a5fbc"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"52714bb1388554562a4c517c8acfbc8cb04640c1","unresolved":false,"context_lines":[{"line_number":11,"context_line":"   OS_STDOUT_CAPTURE\u003d1"},{"line_number":12,"context_line":"   OS_STDERR_CAPTURE\u003d1"},{"line_number":13,"context_line":"   OS_TEST_TIMEOUT\u003d60"},{"line_number":14,"context_line":"deps \u003d -c{env:UPPER_CONSTRAINTS_FILE:https://releases.openstack.org/constraints/upper/master}"},{"line_number":15,"context_line":"       -r{toxinidir}/requirements.txt"},{"line_number":16,"context_line":"       -r{toxinidir}/test-requirements.txt"},{"line_number":17,"context_line":"commands \u003d stestr run {posargs}"}],"source_content_type":"text/x-properties","patch_set":13,"id":"2c5c1e2b_1b5daaa0","line":14,"in_reply_to":"7abcf79e_32562635","updated":"2024-04-09 17:08:18.000000000","message":"Done","commit_id":"3a9580a0159559a168a544c15d39eeb4d77a5fbc"}]}
