)]}'
{".zuul.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ce0730754b9380ce727e8cb5b77fcae0b786f3dd","unresolved":true,"context_lines":[{"line_number":197,"context_line":"- job:"},{"line_number":198,"context_line":"    name: watcher-grenade"},{"line_number":199,"context_line":"    parent: grenade"},{"line_number":200,"context_line":"    nodeset: openstack-single-node-noble"},{"line_number":201,"context_line":"    required-projects: *tempest_base_required_projects"},{"line_number":202,"context_line":"    vars: \u0026grenade_vars"},{"line_number":203,"context_line":"      \u003c\u003c: *tempest_base_vars"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"28762749_2363f445","line":200,"updated":"2026-09-01 18:24:39.000000000","message":"crap no this wont work\n\nwe have fixed this in grenade i belive i shoudl jsut drop this","commit_id":"0ae712942f11e039dcd0c9501c959bae4e7906c6"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"faa7a4c85e524759225cc18b99bd8a3224f7edce","unresolved":true,"context_lines":[{"line_number":197,"context_line":"- job:"},{"line_number":198,"context_line":"    name: watcher-grenade"},{"line_number":199,"context_line":"    parent: grenade"},{"line_number":200,"context_line":"    nodeset: openstack-single-node-noble"},{"line_number":201,"context_line":"    required-projects: *tempest_base_required_projects"},{"line_number":202,"context_line":"    vars: \u0026grenade_vars"},{"line_number":203,"context_line":"      \u003c\u003c: *tempest_base_vars"}],"source_content_type":"text/x-yaml","patch_set":4,"id":"99a9cc3c_9d34c60d","line":200,"in_reply_to":"28762749_2363f445","updated":"2026-09-01 18:26:27.000000000","message":"well grenade uses openstack-single-node-noble i need to keep it but replace it with the multi node version","commit_id":"0ae712942f11e039dcd0c9501c959bae4e7906c6"}],"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d922ddac5724b8a007b007ccd4d2371ddd5be60","unresolved":true,"context_lines":[{"line_number":4,"context_line":"Commit:     sean mooney \u003cwork@seanmooney.info\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-03-23 20:22:38 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Raise minimum Python to 3.11 for 2026.2 runtime"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The 2026.2 (Hibiscus) governance runtime raises the minimum"},{"line_number":10,"context_line":"supported Python version from 3.10 to 3.11 and mandates unit"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"d7aaaa62_ce853a00","line":7,"updated":"2026-03-23 21:05:58.000000000","message":"we need to move the nodeset to noble ubuntu 24.04 for grenade before this will pass.\n\nits currenly using jammy which is incorrect.","commit_id":"19a076a2c512cfc8f347131b54e1a0b7de36ebfc"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"341e8cf7de9db5e75e6ab1c1eba6c7d728960205","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     sean mooney \u003cwork@seanmooney.info\u003e"},{"line_number":5,"context_line":"CommitDate: 2026-03-23 20:22:38 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Raise minimum Python to 3.11 for 2026.2 runtime"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The 2026.2 (Hibiscus) governance runtime raises the minimum"},{"line_number":10,"context_line":"supported Python version from 3.10 to 3.11 and mandates unit"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"8efe43af_1b9accb4","line":7,"in_reply_to":"d7aaaa62_ce853a00","updated":"2026-09-01 18:23:16.000000000","message":"Done","commit_id":"19a076a2c512cfc8f347131b54e1a0b7de36ebfc"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"89e4ab2d4abfedcfde47769464ed27faa0088df1","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     85992612 (Migrate package metadata to pyproject.toml)"},{"line_number":2,"context_line":"Author:     Sean Mooney \u003cwork@seanmooney.info\u003e"},{"line_number":3,"context_line":"AuthorDate: 2026-03-20 21:04:24 +0000"},{"line_number":4,"context_line":"Commit:     Sean Mooney \u003cwork@seanmooney.info\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"080515fd_dffb63ca","line":1,"updated":"2026-09-01 18:47:40.000000000","message":"The final bullet of the commit message reads \u0027Run Grenade jobs on Ubuntu Noble and move to 2 nodese\u0027, truncating or misspelling \u0027nodeset\u0027/\u0027nodes\u0027 and leaving the description of the .zuul.yaml change slightly garbled in the permanent change history.\n\n**Severity**: SUGGESTION | **Confidence**: 0.95\n\n**Impact**: The intended meaning is still guessable from the diff, so impact is limited to clarity and quality of the permanent change history; it is not caught by any code linter because it lives in the commit message.\n\n**Recommendation**:\nAmend the bullet to something like \u0027Run Grenade jobs on Ubuntu Noble using the openstack-two-node-noble nodeset\u0027 before merging.","commit_id":"f20ea7b273843c94f0fe1958a63a64fc901e80a2"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"ef79171c525bbc122a3af7ae916685f443fe9aec","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"acf05511_7cfedac2","updated":"2026-03-20 21:56:02.000000000","message":"this shoudl have an upgrade release note i guess sice it rasies teh min version","commit_id":"840b8aab5906823ad6e7854fd2e77cbc9d9f2f49"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"70cd1f1c593925cc49f546861efa0458c1b790ee","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"d8f699b7_08c40921","updated":"2026-03-23 20:23:09.000000000","message":"still need a release note","commit_id":"19a076a2c512cfc8f347131b54e1a0b7de36ebfc"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fa8ed25be51a40323a7e91ca457c30f1e7f2b600","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f06e7862_2e01850d","updated":"2026-09-08 18:00:25.000000000","message":"recheck\n\n\nlgtm, lets get new logs from jobs","commit_id":"f20ea7b273843c94f0fe1958a63a64fc901e80a2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"b25d47eea6f060816629ee5f7b8746cec01c838b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"98cd15d4_6a0c91eb","updated":"2026-09-09 18:00:01.000000000","message":"Thanks!","commit_id":"61936894ab90aa0bbf2946caa6db771499ed01b2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d3b09b73130c77fe4da06558b7fc4f68a5d93f51","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"772e8164_3154f969","updated":"2026-09-10 11:25:15.000000000","message":"by the way i dropped changing to multinode greneade because it requires use to modify how ovn is deployed and i need to figure out exactly how to do that\n\nthe tl;dr is ovn is being deploy wiht both host set as the external gateway which is causeing the active gateway to fail.\n\ni assume this has been fixed else wehre os we just need to find the correct incataion form somewere elese and add it but thats out of scope fo this change.","commit_id":"61936894ab90aa0bbf2946caa6db771499ed01b2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"6e73685d8dc80b156fa3e28cf6395a5d8f68dc56","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"252f47e6_d39566cd","updated":"2026-09-09 19:55:38.000000000","message":"recheck\n\nit seems that test_execute_zone_migration_volume_and_compute_bfv_with_destination test is unstable","commit_id":"61936894ab90aa0bbf2946caa6db771499ed01b2"}],"tox.ini":[{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"fed25422ecac72fff415e015c0824cd35881be0b","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  find . -type f -name \"*.py[c|o]\" -delete"},{"line_number":48,"context_line":"  stestr --test-path\u003d./watcher/tests/unit run {posargs}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"[testenv:{unit,py3,py311,py312,py313,py314}]"},{"line_number":51,"context_line":"commands \u003d"},{"line_number":52,"context_line":"  rm -f .testrepository/times.dbm"},{"line_number":53,"context_line":"  find . -type f -name \"*.py[c|o]\" -delete"}],"source_content_type":"text/x-properties","patch_set":3,"id":"277ae76e_80d92dad","line":50,"updated":"2026-09-01 18:09:10.000000000","message":"The commit removes py310 from the unit env generic (tox.ini:50 becomes [testenv:{unit,py3,py311,py312,py313,py314}]) and raises requires-python to \u003e\u003d3.11, but the functional env generic at tox.ini:56 still advertises -py310: [testenv:functional{,-py310,-py311,-py312,-py313,-py314}]. Because pyproject.toml now declares requires-python \u003e\u003d3.11, `tox -e functional-py310` executed under a Python 3.10 interpreter would fail at dependency install time when pip refuses to install python-watcher, leaving a documented env name that can no longer work.\n\n**Severity**: SUGGESTION | **Confidence**: 0.85\n\n**Impact**: A developer or CI job invoking tox -e functional-py310 on a Python 3.10 interpreter gets an install failure instead of a clear unsupported-configuration signal, and the tox config contradicts the declared minimum Python version.\n\n**Recommendation**:\nRemove -py310 from the functional env generic so it reads [testenv:functional{,-py311,-py312,-py313,-py314}], matching the unit generics updated in this commit.","commit_id":"5bb5420d501864d7af2066c67254973cf199d9fd"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"ad579d4f834798c23c8eef3bacde822c30e5a9cf","unresolved":false,"context_lines":[{"line_number":47,"context_line":"  find . -type f -name \"*.py[c|o]\" -delete"},{"line_number":48,"context_line":"  stestr --test-path\u003d./watcher/tests/unit run {posargs}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"[testenv:{unit,py3,py311,py312,py313,py314}]"},{"line_number":51,"context_line":"commands \u003d"},{"line_number":52,"context_line":"  rm -f .testrepository/times.dbm"},{"line_number":53,"context_line":"  find . -type f -name \"*.py[c|o]\" -delete"}],"source_content_type":"text/x-properties","patch_set":7,"id":"beffa6ef_96579176","line":50,"updated":"2026-09-09 13:16:53.000000000","message":"The change drops py310 from the unit test environment list but leaves py310 in the functional environment list at tox.ini line 56: [testenv:functional{,-py310,-py311,-py312,-py313,-py314}]. With requires-python now \u003e\u003d3.11, the functional-py310 environment can no longer be created or run: pip will refuse to install python-watcher under Python 3.10, so tox -e functional-py310 fails at install time. The two matrices now disagree about which interpreters are supported.\n\n**Severity**: WARNING | **Confidence**: 0.9\n\n**Impact**: Contributors or CI invoking tox -e functional-py310 hit a dependency-install failure instead of a clear unsupported-environment signal, and the tox config advertises a Python 3.10 functional test path that the package can no longer be installed on. It also creates divergent matrices that must be kept in sync on the next interpreter bump.\n\n**Suggestion**:\nRemove the -py310 entry from the functional environment list so it reads [testenv:functional{,-py311,-py312,-py313,-py314}], matching the unit matrix and requires-python.","commit_id":"61936894ab90aa0bbf2946caa6db771499ed01b2"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"b25d47eea6f060816629ee5f7b8746cec01c838b","unresolved":true,"context_lines":[{"line_number":47,"context_line":"  find . -type f -name \"*.py[c|o]\" -delete"},{"line_number":48,"context_line":"  stestr --test-path\u003d./watcher/tests/unit run {posargs}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"[testenv:{unit,py3,py311,py312,py313,py314}]"},{"line_number":51,"context_line":"commands \u003d"},{"line_number":52,"context_line":"  rm -f .testrepository/times.dbm"},{"line_number":53,"context_line":"  find . -type f -name \"*.py[c|o]\" -delete"}],"source_content_type":"text/x-properties","patch_set":7,"id":"fbe1986f_9a548638","line":50,"in_reply_to":"8a37ece1_d92a504c","updated":"2026-09-09 18:00:01.000000000","message":"@sean can add in a follow up patch I think. the requires python \u003e\u003d 3.11 is the most important for this change.","commit_id":"61936894ab90aa0bbf2946caa6db771499ed01b2"},{"author":{"_account_id":34452,"name":"Joan Gilabert","display_name":"jgilaber","email":"jgilaber@redhat.com","username":"jgilaber"},"change_message_id":"c09fbe9d132f330cefb034daeefefe88548f1f9e","unresolved":true,"context_lines":[{"line_number":47,"context_line":"  find . -type f -name \"*.py[c|o]\" -delete"},{"line_number":48,"context_line":"  stestr --test-path\u003d./watcher/tests/unit run {posargs}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"[testenv:{unit,py3,py311,py312,py313,py314}]"},{"line_number":51,"context_line":"commands \u003d"},{"line_number":52,"context_line":"  rm -f .testrepository/times.dbm"},{"line_number":53,"context_line":"  find . -type f -name \"*.py[c|o]\" -delete"}],"source_content_type":"text/x-properties","patch_set":7,"id":"8a37ece1_d92a504c","line":50,"in_reply_to":"beffa6ef_96579176","updated":"2026-09-09 15:13:02.000000000","message":"not a big deal, but would be good to fix","commit_id":"61936894ab90aa0bbf2946caa6db771499ed01b2"},{"author":{"_account_id":28006,"name":"teim-ci","display_name":"teim-ci","email":"ci@seanmooney.info","username":"ci-sean-mooney","status":"this is a third-party ci account run by sean-k-mooney on irc\nhosted at zuul.teim.app"},"tag":"autogenerated:zuul:automatic-ci","change_message_id":"01fc2b456f8fd2067482ce7a88fcdadaa36212d7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  find . -type f -name \"*.py[c|o]\" -delete"},{"line_number":54,"context_line":"  stestr --test-path\u003d./watcher/tests/unit run {posargs}"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"[testenv:functional{,-py310,-py311,-py312,-py313,-py314}]"},{"line_number":57,"context_line":"passenv \u003d"},{"line_number":58,"context_line":"  {[testenv]passenv}"},{"line_number":59,"context_line":"  WATCHER_FUNC_TEST_LOG_DIR"}],"source_content_type":"text/x-properties","patch_set":7,"id":"ce4c80b2_448354e2","line":56,"updated":"2026-09-09 20:04:06.000000000","message":"The commit drops py310 from the unit tox environment matrix but leaves the py310 variant in the functional matrix, so the tox file still advertises an environment that the package metadata no longer permits.\n\n**Severity**: WARNING | **Confidence**: 0.92\n\n**Impact**: \u0027tox -e functional-py310\u0027 now fails at install time on Python 3.10 because pip rejects the package (requires-python \u003e\u003d 3.11), giving developers who reasonably assume the declared environment is supported a confusing install error rather than a clear unsupported-version signal.\n\n**Suggestion**:\nUpdate tox.ini:56 to \u0027[testenv:functional{,-py311,-py312,-py313,-py314}]\u0027 so the functional matrix matches the unit matrix and the new Python floor.","commit_id":"61936894ab90aa0bbf2946caa6db771499ed01b2"}],"watcher/common/utils.py":[{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"fa8ed25be51a40323a7e91ca457c30f1e7f2b600","unresolved":true,"context_lines":[{"line_number":190,"context_line":"    # to avoid lingering threads. For consistency, we\u0027ll convert eventlet"},{"line_number":191,"context_line":"    # timeout exceptions to asyncio timeout errors."},{"line_number":192,"context_line":"    with eventlet.timeout.Timeout("},{"line_number":193,"context_line":"        seconds\u003dtimeout, exception\u003dTimeoutError(f\"Timeout: {timeout}s\")"},{"line_number":194,"context_line":"    ):"},{"line_number":195,"context_line":"        return tpool.execute(tpool_wrapper)"}],"source_content_type":"text/x-python","patch_set":5,"id":"aaaa8a02_0cb24a5e","line":193,"range":{"start_line":193,"start_character":0,"end_line":193,"end_character":71},"updated":"2026-09-08 18:00:25.000000000","message":"fine, this is going away soon","commit_id":"f20ea7b273843c94f0fe1958a63a64fc901e80a2"}]}
