)]}'
{"id":"openstack%2Foslo.versionedobjects~992229","triplet_id":"openstack%2Foslo.versionedobjects~master~I6e3a60f6d028aa45cdb33f2e20f9d64e6d42c1dd","project":"openstack/oslo.versionedobjects","branch":"master","topic":"typing","attention_set":{},"removed_from_attention_set":{"15334":{"account":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"last_update":"2026-06-09 15:26:33.000000000","reason":"\u003cGERRIT_ACCOUNT_15334\u003e replied on the change","reason_account":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"}}},"hashtags":[],"change_id":"I6e3a60f6d028aa45cdb33f2e20f9d64e6d42c1dd","subject":"mypy: Fix cross-module field inheritance for mixin classes","status":"MERGED","created":"2026-06-08 12:38:53.000000000","updated":"2026-06-09 19:32:18.000000000","submitted":"2026-06-09 19:30:36.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":1,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"992229-typing","meta_rev_id":"311597b86a3bbeb0a9ff989936f1e8e841444b9e","_number":992229,"virtual_id_number":992229,"owner":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"value":0,"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"tag":"autogenerated:zuul:gate","value":2,"date":"2026-06-09 19:30:36.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"all":[{"value":2,"date":"2026-06-09 15:26:33.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"approved":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"all":[{"value":1,"date":"2026-06-09 15:26:33.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Backport-Candidate":{"all":[{"value":0,"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do Not Backport","-1":"Not A Backport Candidate"," 0":"Backport Review Needed","+1":"Proposed Backport","+2":"Should Backport"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-06-08 14:27:40.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"}],"messages":[{"id":"570d567839229dc396e8c3853ba317682cbab571","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"date":"2026-06-08 12:38:53.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"f108639a931a7dd10a341e2ab737b2c114462015","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-08 14:27:40.000000000","message":"Patch Set 1: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/5ee19e654b94406293909f9ff8d005b4\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/c6b3d935917d4c7da8d33260d8f473c7 : SUCCESS in 1h 42m 18s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/8e885cbffb3a42ebb333e768d58b2700 : SUCCESS in 4m 32s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/8101a4ee0f0246fb92af22169304122b : SUCCESS in 3m 44s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/4140db81550f4b05a7832fb5c1fbb631 : SUCCESS in 3m 39s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/88c89422a45749fb80b366641c4954c7 : SUCCESS in 5m 56s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/871a8c1253dc46a9b03af2d1d48a6558 : SUCCESS in 4m 10s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/8a4b4abc27634b9bba1ad83a3efcc49d : SUCCESS in 6m 03s\n- oslo.versionedobjects-src-grenade-multinode https://zuul.opendev.org/t/openstack/build/2f86e42fbf814c1b820dbc2c0401c62e : SUCCESS in 1h 19m 33s (non-voting)\n- oslo.versionedobjects-nova-tox-py313 https://zuul.opendev.org/t/openstack/build/1d687676195f451b8e2b5f926bacf673 : FAILURE in 14m 07s\n- oslo.versionedobjects-ironic-tox-py313 https://zuul.opendev.org/t/openstack/build/15f88d1138c04668943d196b2a77fd00 : SUCCESS in 8m 36s","accounts_in_message":[],"_revision_number":1},{"id":"f8d5795a6b6a06502da5ee6d53055a6d8e3e48e3","author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"date":"2026-06-09 15:26:33.000000000","message":"Patch Set 1: Code-Review+2 Workflow+1\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"f4fb09956fcc5bdcd7386fd1ba154c76ce0d5447","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-09 16:44:17.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/7b0116022f014109b290106da90b28a9\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/abcb4b9c78ca42bfb74d4abe8f2fda98 : SUCCESS in 1h 13m 04s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/4d3d1543500341dbaef8dc74dcd8f2dc : SUCCESS in 2m 59s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/b8e04c0c38b84867a61217eac13509c4 : SUCCESS in 4m 24s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/42b06e0d86d5481994fb7e23aa2aed98 : SUCCESS in 3m 20s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/71bf0b6aff8b4573b7377ba4f7e4bc60 : SUCCESS in 5m 32s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/6497db283e2a45ef8afa2dd3f054108f : SUCCESS in 3m 53s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/5c2bc70e63e045759f6e0ae69018b11c : SUCCESS in 3m 58s\n- oslo.versionedobjects-src-grenade-multinode https://zuul.opendev.org/t/openstack/build/d4802fd0c3714ba8ae24e55a895eb17a : SUCCESS in 1h 12m 20s (non-voting)\n- oslo.versionedobjects-nova-tox-py313 https://zuul.opendev.org/t/openstack/build/5c8492001e4d420386e49ad8f78a0924 : SUCCESS in 21m 29s\n- oslo.versionedobjects-ironic-tox-py313 https://zuul.opendev.org/t/openstack/build/44847f40869643beb620dd1574ca92c6 : SUCCESS in 8m 09s","accounts_in_message":[],"_revision_number":1},{"id":"37aabe05476233adb73770f8fb587afa062082e5","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-09 17:17:55.000000000","message":"Patch Set 1: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":1},{"id":"cb540917dce9d40e8786834253c52b25dc2fb561","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-09 19:30:36.000000000","message":"Patch Set 1: Verified+2\n\nBuild succeeded (gate pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/a5a3c18779d34af18339cb0c053806f0\n\n- tempest-full-py3 https://zuul.opendev.org/t/openstack/build/b25f83bb09c34e78bd681e99af7240ab : SUCCESS in 1h 53m 51s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/3f9b0a43a75340c596248c4b23f5e986 : SUCCESS in 3m 56s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/7c27d6f8b74441bfbec755df27a13623 : SUCCESS in 3m 44s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/abe6d7ec039f4ee186726532792d4557 : SUCCESS in 3m 50s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/f122bdc71abe451eb2dd19dffeb8f142 : SUCCESS in 4m 33s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/8c819bb6d32944eaa6324232d8693a97 : SUCCESS in 7m 02s\n- oslo.versionedobjects-nova-tox-py313 https://zuul.opendev.org/t/openstack/build/3133f1fff03343cb9477e3d6ea9da26d : SUCCESS in 15m 03s\n- oslo.versionedobjects-ironic-tox-py313 https://zuul.opendev.org/t/openstack/build/d347f48a1e284404a27818b86b28f2ab : SUCCESS in 9m 08s","accounts_in_message":[],"_revision_number":1},{"id":"1a7017a843efcf3881e65905b388c56c62003c8d","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-09 19:30:36.000000000","message":"Change has been successfully merged","accounts_in_message":[],"_revision_number":1},{"id":"311597b86a3bbeb0a9ff989936f1e8e841444b9e","tag":"autogenerated:zuul:promote","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-06-09 19:32:18.000000000","message":"Patch Set 1:\n\nBuild succeeded (promote pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/1b7e614cfff54bda9d8ed9446d6e2c3e\n\n- promote-openstack-tox-docs https://zuul.opendev.org/t/openstack/build/4b0d883eec3c4134bcde2ec736045be1 : SUCCESS in 40s","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"330446af3367393f12f134b36a0da28985105188","revisions":{"330446af3367393f12f134b36a0da28985105188":{"kind":"REWORK","_number":1,"created":"2026-06-08 12:38:53.000000000","uploader":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"ref":"refs/changes/29/992229/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/oslo.versionedobjects","ref":"refs/changes/29/992229/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/oslo.versionedobjects refs/changes/29/992229/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/oslo.versionedobjects refs/changes/29/992229/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/oslo.versionedobjects refs/changes/29/992229/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/oslo.versionedobjects refs/changes/29/992229/1"}}},"commit":{"parents":[{"commit":"4ffe9a67b7d89bba1e7dab820b10ba605767a947","subject":"mypy: Resolve ObjectField types in a second pass","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.versionedobjects/commit/4ffe9a67b7d89bba1e7dab820b10ba605767a947"}]}],"author":{"name":"Stephen Finucane","email":"stephenfin@redhat.com","date":"2026-05-12 16:57:12.000000000","tz":60},"committer":{"name":"Stephen Finucane","email":"stephenfin@redhat.com","date":"2026-06-08 12:34:52.000000000","tz":60},"subject":"mypy: Fix cross-module field inheritance for mixin classes","message":"mypy: Fix cross-module field inheritance for mixin classes\n\nThe plugin previously failed to type-check fields from mixin classes\ndefined in other modules (e.g. base.TimestampedObject). The root cause\nwas that mypy clears class AST bodies after analyzing each module, so\nby the time the plugin fires for a user class, parent class bodies from\nalready-analyzed modules are empty.\n\nThe fix is a public marker class, VersionedObjectMixin, that signals to\nthe plugin\u0027s get_base_class_hook that the class defines OVO fields. The\nhook fires while the mixin\u0027s own body is intact (during its own module\u0027s\nanalysis), adds the field types to its names dict, and mypy\u0027s normal MRO\nresolution propagates them to subclasses.\n\nTimestampedObject now inherits from VersionedObjectMixin, making its\ncreated_at/updated_at fields properly typed without any workaround.\nUsers can apply the same pattern to their own field-defining mixins.\n\nChange-Id: I6e3a60f6d028aa45cdb33f2e20f9d64e6d42c1dd\nSigned-off-by: Stephen Finucane \u003cstephenfin@redhat.com\u003e\nAssisted-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.versionedobjects/commit/330446af3367393f12f134b36a0da28985105188"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/oslo.versionedobjects/commit/330446af3367393f12f134b36a0da28985105188"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"CLOSED","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY","applied_by":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"}},{"label":"Workflow","status":"MAY","applied_by":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"}},{"label":"Backport-Candidate","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dMAX"],"failing_atoms":["label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Backport-Candidate","description":"Backport candidate status","status":"NOT_APPLICABLE","is_legacy":false,"applicability_expression_result":{"fulfilled":false,"status":"FAIL"},"submittability_expression_result":{"expression":"is:true","fulfilled":true,"status":"NOT_EVALUATED","passing_atoms":[],"failing_atoms":[],"atom_explanations":{}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dMAX"],"failing_atoms":["label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Workflow\u003dMAX"],"failing_atoms":["label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
