)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6bc75ff4ace0f794029accc4ba1a8ff876863c41","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     Michal Nasiadka \u003cmnasiadka@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-08-07 06:19:33 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Do not fail on optional dependencies"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I27af77991b850249d9fef3aa60c3645b83ad6cc4"},{"line_number":10,"context_line":"Signed-off-by: Michal Nasiadka \u003cmnasiadka@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"f29d47f9_1a16ad3c","line":7,"updated":"2026-08-07 10:11:19.000000000","message":"Could you add an explanation *why*?","commit_id":"6f778d37e512d7fe9b68e80cf8ae0aaaee94e098"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"6ae5588aa80a731c99696f14fcfc6a598d306003","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Michal Nasiadka \u003cmnasiadka@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-08-07 06:19:33 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Do not fail on optional dependencies"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I27af77991b850249d9fef3aa60c3645b83ad6cc4"},{"line_number":10,"context_line":"Signed-off-by: Michal Nasiadka \u003cmnasiadka@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"58404b2f_8ec6351e","line":7,"in_reply_to":"f29d47f9_1a16ad3c","updated":"2026-09-17 06:43:34.000000000","message":"Done","commit_id":"6f778d37e512d7fe9b68e80cf8ae0aaaee94e098"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6bc75ff4ace0f794029accc4ba1a8ff876863c41","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c0f4c734_b3cadab3","updated":"2026-08-07 10:11:19.000000000","message":"This needs rebasing once the patch below lands, but you already know that. Couple of comments inline. We probably also want to land https://review.opendev.org/c/openstack/requirements/+/1000078 first too","commit_id":"6f778d37e512d7fe9b68e80cf8ae0aaaee94e098"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"b7a951254a5769c92bb7954cddd5e1686741334d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"2c1f7914_22d35c24","updated":"2026-08-20 18:08:14.000000000","message":"fyi https://review.opendev.org/c/openstack/requirements/+/1000669 is an example where this could be helpful","commit_id":"6f778d37e512d7fe9b68e80cf8ae0aaaee94e098"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"42544e965ba4a1e4dcd0ba3efcfa1c3c7af72d9d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"fb941efc_bfcbfe92","updated":"2026-08-07 10:11:34.000000000","message":"just to catch your eye, since this needs rework anyway","commit_id":"6f778d37e512d7fe9b68e80cf8ae0aaaee94e098"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"395d2cda5af8c900abb5a4c4ef01de1de5cda6a5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"3e98a2e5_9ca110f1","updated":"2026-09-30 10:02:17.000000000","message":"...though I have some comments","commit_id":"b23e101ff711ed87b1b7cfee75c695f95e9da3ee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"a3d988ac9f8f628e99a701f26c47d1403a4dd46a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"7cbe93a2_fccfd627","updated":"2026-09-30 09:58:15.000000000","message":"Okay, this has bitten me enough times (in the context of `types-` libraries, of which there are dozens if not hundreds) that I can get on board with this","commit_id":"b23e101ff711ed87b1b7cfee75c695f95e9da3ee"},{"author":{"_account_id":32968,"name":"Juan Larriba","email":"jlarriba@redhat.com","username":"jlarriba"},"change_message_id":"9904ac0eb30a6c14ec4085ed93558e0321e58ef3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"bd56514b_92b53ee6","updated":"2026-09-17 12:30:47.000000000","message":"The beautiful thing about using optional depencies for highly specialized libraries is that we do not need to have to implement any sort of centralized management for those.","commit_id":"b23e101ff711ed87b1b7cfee75c695f95e9da3ee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e9c473c806f4fb1a813ccc5d0818817376c33907","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9d78d40b_11125742","updated":"2026-10-01 14:45:06.000000000","message":"Fixed my own comments","commit_id":"b3ccdfb30f19877d17ab000d2778fddb7470cb7b"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"0c4766227f415262c91c6e788e51b71f77382dee","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"96fbf283_ae97c10c","updated":"2026-10-02 08:36:53.000000000","message":"I don\u0027t have time to review the code changes in detail right now, but the idea looks reasonable and we have some projects that are waiting on it, so I\u0027m ok with testing this in the wild","commit_id":"b3ccdfb30f19877d17ab000d2778fddb7470cb7b"}],"openstack_requirements/check.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6bc75ff4ace0f794029accc4ba1a8ff876863c41","unresolved":false,"context_lines":[{"line_number":347,"context_line":"                    denylist,"},{"line_number":348,"context_line":"                    global_reqs,"},{"line_number":349,"context_line":"                    backports,"},{"line_number":350,"context_line":"                    allow_3_only,"},{"line_number":351,"context_line":"                )"},{"line_number":352,"context_line":"                or failed"},{"line_number":353,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":5,"id":"9b099e4a_8b45289a","side":"PARENT","line":350,"updated":"2026-08-07 10:11:19.000000000","message":"I was going to say that I was pretty sure I\u0027d a patch around here that got rid of this, but I see [it\u0027s already merged](https://review.opendev.org/c/openstack/requirements/+/989213). That would explain the merge conflict alright 😀","commit_id":"3b80226b6025682b891c5ee0218b69f2f29b1214"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"395d2cda5af8c900abb5a4c4ef01de1de5cda6a5","unresolved":true,"context_lines":[{"line_number":321,"context_line":"    # equivalents we want enforced"},{"line_number":322,"context_line":"    for fname, freqs in head_reqs.reqs_by_file.items():"},{"line_number":323,"context_line":"        print(f\"Validating {fname}\")"},{"line_number":324,"context_line":"        is_optional \u003d fname.endswith(\"extra)\")"},{"line_number":325,"context_line":"        for name, reqs in freqs.items():"},{"line_number":326,"context_line":"            if is_optional:"},{"line_number":327,"context_line":"                if name in denylist:"}],"source_content_type":"text/x-python","patch_set":7,"id":"03f25a0f_134cc676","line":324,"updated":"2026-09-30 10:02:17.000000000","message":"This is a bit hacky and you\u0027re relying on the name to encode additional metadata about the type of dependency. How about we instead change `reqs_by_file` so that it only stores hard dependencies and move extras (and dependency groups) to another variable?","commit_id":"b23e101ff711ed87b1b7cfee75c695f95e9da3ee"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"fd013b9f76ab64178c2887ec807c6f590c9cc018","unresolved":false,"context_lines":[{"line_number":321,"context_line":"    # equivalents we want enforced"},{"line_number":322,"context_line":"    for fname, freqs in head_reqs.reqs_by_file.items():"},{"line_number":323,"context_line":"        print(f\"Validating {fname}\")"},{"line_number":324,"context_line":"        is_optional \u003d fname.endswith(\"extra)\")"},{"line_number":325,"context_line":"        for name, reqs in freqs.items():"},{"line_number":326,"context_line":"            if is_optional:"},{"line_number":327,"context_line":"                if name in denylist:"}],"source_content_type":"text/x-python","patch_set":7,"id":"c3a175d9_c6b84d36","line":324,"in_reply_to":"03f25a0f_134cc676","updated":"2026-10-01 12:22:18.000000000","message":"Done","commit_id":"b23e101ff711ed87b1b7cfee75c695f95e9da3ee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"395d2cda5af8c900abb5a4c4ef01de1de5cda6a5","unresolved":true,"context_lines":[{"line_number":328,"context_line":"                    continue"},{"line_number":329,"context_line":"                if name not in global_reqs:"},{"line_number":330,"context_line":"                    print("},{"line_number":331,"context_line":"                        f\"WARNING: Optional dependency \u0027{name}\u0027 not in \""},{"line_number":332,"context_line":"                        f\"openstack/requirements\""},{"line_number":333,"context_line":"                    )"},{"line_number":334,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"60646e0c_5892da0b","line":331,"updated":"2026-09-30 10:02:17.000000000","message":"Is this actually a warning or just a note that we skipped it?","commit_id":"b23e101ff711ed87b1b7cfee75c695f95e9da3ee"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"fd013b9f76ab64178c2887ec807c6f590c9cc018","unresolved":false,"context_lines":[{"line_number":328,"context_line":"                    continue"},{"line_number":329,"context_line":"                if name not in global_reqs:"},{"line_number":330,"context_line":"                    print("},{"line_number":331,"context_line":"                        f\"WARNING: Optional dependency \u0027{name}\u0027 not in \""},{"line_number":332,"context_line":"                        f\"openstack/requirements\""},{"line_number":333,"context_line":"                    )"},{"line_number":334,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"d2346868_947547d9","line":331,"in_reply_to":"60646e0c_5892da0b","updated":"2026-10-01 12:22:18.000000000","message":"Done","commit_id":"b23e101ff711ed87b1b7cfee75c695f95e9da3ee"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"277785b06cf075381daf2ebd5a14a415e4ad57cf","unresolved":true,"context_lines":[{"line_number":346,"context_line":"                print("},{"line_number":347,"context_line":"                    f\"NOTE: Optional dependency \u0027{name}\u0027 not in \""},{"line_number":348,"context_line":"                    f\"openstack/requirements, skipping\""},{"line_number":349,"context_line":"                )"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    return failed"}],"source_content_type":"text/x-python","patch_set":8,"id":"f7da7a7b_055897a5","line":349,"updated":"2026-10-01 13:26:47.000000000","message":"What about if an optional deliverable **is** in g-r/u-c but the metadata differs from what we have there (e.g. a project specifies `foo\u003c5` while u-c specifies `foo\u003d\u003d6.0.0`)? Should this be an error? Note that this will cause a hard failure in the projects\u0027s gates regardless.\n\n```\n❯ cat -p requirements.txt\nrequests\u003c2.30\n\n❯ cat -p constraints.txt \nrequests\u003d\u003d2.34.2\n\n❯ pip install -r requirements.txt -c constraints.txt \nERROR: Cannot install requests\u003c2.30 because these package versions have conflicting dependencies.\n\nThe conflict is caused by:\n    The user requested requests\u003c2.30\n    The user requested (constraint) requests\u003d\u003d2.34.2\n\nAdditionally, some packages in these conflicts have no matching distributions available for your environment:\n    requests\n\nTo fix this you could try to:\n1. loosen the range of package versions you\u0027ve specified\n2. remove package versions to allow pip to attempt to solve the dependency conflict\n\n\n[notice] A new release of pip is available: 26.0.1 -\u003e 26.2.1\n[notice] To update, run: pip install --upgrade pip\nERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/topics/dependency-resolution/#dealing-with-dependency-conflicts\n```","commit_id":"f38863fe682aca522771dbdd5daa53c92e7a2424"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"fd2b67d82f278b704b15be08300f83d18e7a831e","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                print("},{"line_number":347,"context_line":"                    f\"NOTE: Optional dependency \u0027{name}\u0027 not in \""},{"line_number":348,"context_line":"                    f\"openstack/requirements, skipping\""},{"line_number":349,"context_line":"                )"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    return failed"}],"source_content_type":"text/x-python","patch_set":8,"id":"1130bd74_cc2512bd","line":349,"in_reply_to":"f7da7a7b_055897a5","updated":"2026-10-01 14:44:40.000000000","message":"Done","commit_id":"f38863fe682aca522771dbdd5daa53c92e7a2424"}],"openstack_requirements/cmds/check_exists.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"277785b06cf075381daf2ebd5a14a415e4ad57cf","unresolved":true,"context_lines":[{"line_number":115,"context_line":"                                error_count +\u003d 1"},{"line_number":116,"context_line":"                                continue"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    for extras_file, extras_data in project_data.get(\u0027extras\u0027, {}).items():"},{"line_number":119,"context_line":"        for extra_name, deps in extras_data.items():"},{"line_number":120,"context_line":"            print("},{"line_number":121,"context_line":"                f\u0027\\nComparing {extras_file} [{extra_name!r}] optional dependencies \u0027"},{"line_number":122,"context_line":"                f\u0027with upper-constraints\u0027"},{"line_number":123,"context_line":"            )"},{"line_number":124,"context_line":"            requirements \u003d requirement.parse_lines(deps)"},{"line_number":125,"context_line":"            for name, _ in requirements.items():"},{"line_number":126,"context_line":"                if not name or name in denylist:"},{"line_number":127,"context_line":"                    continue"},{"line_number":128,"context_line":"                if name not in upper_constraints:"},{"line_number":129,"context_line":"                    print("},{"line_number":130,"context_line":"                        f\u0027NOTE: {name} from {extras_file} [{extra_name!r}] optional \u0027"},{"line_number":131,"context_line":"                        f\u0027dependency not found in upper-constraints, skipping\u0027"},{"line_number":132,"context_line":"                    )"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    return 1 if error_count else 0"}],"source_content_type":"text/x-python","patch_set":8,"id":"f5c747b0_f381f24c","line":132,"range":{"start_line":118,"start_character":0,"end_line":132,"end_character":21},"updated":"2026-10-01 13:26:47.000000000","message":"I\u0027m not entirely sure what this is doing. It alleges to be comparing the dependencies with u-c, but the entire point of this change is to stop doing exactly that, no? 😅 So, is this necessary? If it is, could you add a context comment above this block and/or update the printed message to explain what we\u0027re attempting to do here?","commit_id":"f38863fe682aca522771dbdd5daa53c92e7a2424"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"fd2b67d82f278b704b15be08300f83d18e7a831e","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                                error_count +\u003d 1"},{"line_number":116,"context_line":"                                continue"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    for extras_file, extras_data in project_data.get(\u0027extras\u0027, {}).items():"},{"line_number":119,"context_line":"        for extra_name, deps in extras_data.items():"},{"line_number":120,"context_line":"            print("},{"line_number":121,"context_line":"                f\u0027\\nComparing {extras_file} [{extra_name!r}] optional dependencies \u0027"},{"line_number":122,"context_line":"                f\u0027with upper-constraints\u0027"},{"line_number":123,"context_line":"            )"},{"line_number":124,"context_line":"            requirements \u003d requirement.parse_lines(deps)"},{"line_number":125,"context_line":"            for name, _ in requirements.items():"},{"line_number":126,"context_line":"                if not name or name in denylist:"},{"line_number":127,"context_line":"                    continue"},{"line_number":128,"context_line":"                if name not in upper_constraints:"},{"line_number":129,"context_line":"                    print("},{"line_number":130,"context_line":"                        f\u0027NOTE: {name} from {extras_file} [{extra_name!r}] optional \u0027"},{"line_number":131,"context_line":"                        f\u0027dependency not found in upper-constraints, skipping\u0027"},{"line_number":132,"context_line":"                    )"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    return 1 if error_count else 0"}],"source_content_type":"text/x-python","patch_set":8,"id":"4bb281b8_8c508a30","line":132,"range":{"start_line":118,"start_character":0,"end_line":132,"end_character":21},"in_reply_to":"f5c747b0_f381f24c","updated":"2026-10-01 14:44:40.000000000","message":"Removed this.","commit_id":"f38863fe682aca522771dbdd5daa53c92e7a2424"}],"openstack_requirements/project.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"fd2b67d82f278b704b15be08300f83d18e7a831e","unresolved":false,"context_lines":[{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    if ("},{"line_number":173,"context_line":"        build_backend :\u003d data[\u0027build-system\u0027].get(\u0027build-backend\u0027)"},{"line_number":174,"context_line":"    ) !\u003d \u0027pbr.build\u0027:"},{"line_number":175,"context_line":"        print("},{"line_number":176,"context_line":"            f\"pyproject.toml has invalid \u0027build-system.build-backend\u0027. \""},{"line_number":177,"context_line":"            f\"Expected \u0027pbr.build\u0027; got {build_backend!r}\","}],"source_content_type":"text/x-python","patch_set":9,"id":"935da4e7_a50091a3","line":174,"updated":"2026-10-01 14:44:40.000000000","message":"This wasn\u0027t me: it was added by running `tox -e pep8`. It should disappear if https://review.opendev.org/c/openstack/requirements/+/1000078 merges first","commit_id":"b3ccdfb30f19877d17ab000d2778fddb7470cb7b"}],"openstack_requirements/tests/common.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6bc75ff4ace0f794029accc4ba1a8ff876863c41","unresolved":true,"context_lines":[{"line_number":94,"context_line":"    pyproject_toml_path\u003d\"openstack_requirements/tests/files/pyproject.toml\","},{"line_number":95,"context_line":")"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class GlobalRequirements(fixtures.Fixture):"},{"line_number":99,"context_line":"    def setUp(self):"},{"line_number":100,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"26dbfea5_e3635787","side":"PARENT","line":97,"updated":"2026-08-07 10:11:19.000000000","message":"Weird that pep8 isn\u0027t shouting at us for this. I wonder if something is broken?\n\nLater: Ah, we need https://review.opendev.org/c/openstack/requirements/+/1000078","commit_id":"3b80226b6025682b891c5ee0218b69f2f29b1214"},{"author":{"_account_id":22629,"name":"Michal Nasiadka","email":"mnasiadka@gmail.com","username":"mnasiadka"},"change_message_id":"241d299f60eba3689a8e5097e2da5ea7b700814d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    pyproject_toml_path\u003d\"openstack_requirements/tests/files/pyproject.toml\","},{"line_number":95,"context_line":")"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class GlobalRequirements(fixtures.Fixture):"},{"line_number":99,"context_line":"    def setUp(self):"},{"line_number":100,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":5,"id":"42d3123a_849546e7","side":"PARENT","line":97,"in_reply_to":"26dbfea5_e3635787","updated":"2026-10-01 12:23:03.000000000","message":"Acknowledged","commit_id":"3b80226b6025682b891c5ee0218b69f2f29b1214"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"277785b06cf075381daf2ebd5a14a415e4ad57cf","unresolved":true,"context_lines":[{"line_number":94,"context_line":"    pyproject_toml_path\u003d\"openstack_requirements/tests/files/pyproject.toml\","},{"line_number":95,"context_line":")"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class GlobalRequirements(fixtures.Fixture):"},{"line_number":99,"context_line":"    def setUp(self):"},{"line_number":100,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":8,"id":"44fe9cbf_ca51be49","side":"PARENT","line":97,"updated":"2026-10-01 13:26:47.000000000","message":"I think you want to re-add this. Classes should be preceded by two lines. https://review.opendev.org/c/openstack/requirements/+/1000078 will make this an error for the pep8 job.","commit_id":"9edc04289eca1a4c18ae86e4430416d82a5b07fa"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"fd2b67d82f278b704b15be08300f83d18e7a831e","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    pyproject_toml_path\u003d\"openstack_requirements/tests/files/pyproject.toml\","},{"line_number":95,"context_line":")"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class GlobalRequirements(fixtures.Fixture):"},{"line_number":99,"context_line":"    def setUp(self):"},{"line_number":100,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":8,"id":"862e35fd_d57cf348","side":"PARENT","line":97,"in_reply_to":"44fe9cbf_ca51be49","updated":"2026-10-01 14:44:40.000000000","message":"Done","commit_id":"9edc04289eca1a4c18ae86e4430416d82a5b07fa"}]}
