)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8b5a7d2ca3bea9c45e6d26079d6fb30fba4a2a8b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c9473f66_24eb535c","updated":"2026-05-19 17:00:50.000000000","message":"so this is only somewhat ture\n\nits only in the governace repo for DPL projects\nPTL project coudl use that but they sotread the release liason info in this repo\ninstead because it predate the useage in the governace repo.\n\n+0 because i dont actully mind consolidating but im not actullly a ware of any annouch or change in process that would actully make the governace repo the aturitive place for this for ptl based progjects","commit_id":"0947822d1b176c66a4b8dc532c14b841a753a6fd"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"ac9d899e7e0c6ac90d7580a863e6562339920521","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c7bd2302_8e8d485e","updated":"2026-05-19 16:44:41.000000000","message":"thanks for working on this Stephen. We had a discussion in the past that the duplication is unnecessary, but haven\u0027t acted on it.\n\nNote, that tools/check_approval.py has a ~copy in project-config. I\u0027ve created a patch for that based on this patch:\n\nhttps://review.opendev.org/c/openstack/project-config/+/989179","commit_id":"0947822d1b176c66a4b8dc532c14b841a753a6fd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e4e8771d73b326d726f9721fa9c8fe6612bd6fa3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b32688d1_b0d12a6f","in_reply_to":"7c7e8f1f_95d92c0b","updated":"2026-05-20 09:09:57.000000000","message":"i did but my point was it did not require the tc to approve relieas liasons addtions before that was doen by the release team and now it will be done by the tc by moving it to the new repo.\nconsoidating mean you are changing that as well for ptl projects\n\nyou are effectivly also proposing a governace change rather then just a tooling change.","commit_id":"0947822d1b176c66a4b8dc532c14b841a753a6fd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e88962cf9190d9a66ef11a78b6cf39403f12a2e9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9112cbdf_e922c9e1","in_reply_to":"b32688d1_b0d12a6f","updated":"2026-05-20 15:18:17.000000000","message":"They have to be *approved* by the TC, but the don\u0027t have to be submitted (\"done\") by them.","commit_id":"0947822d1b176c66a4b8dc532c14b841a753a6fd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c95783d2e4d72b1e0c9bdba80b38364862444a1e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7c7e8f1f_95d92c0b","in_reply_to":"c9473f66_24eb535c","updated":"2026-05-19 19:48:22.000000000","message":"\u003e so this is only somewhat ture\n\nWhat\u0027s only somewhat true?\n\n\u003e its only in the governace repo for DPL projects\n\u003e PTL project coudl use that but they sotread the release liason info in this repo\n\u003e instead because it predate the useage in the governace repo.\n\u003e \n\u003e +0 because i dont actully mind consolidating but im not actullly a ware of any annouch or change in process that would actully make the governace repo the aturitive place for this for ptl based progjects\n\nSee the `Depends-on` in the commit message 😉","commit_id":"0947822d1b176c66a4b8dc532c14b841a753a6fd"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"a6ef483371c4c1c88cb6f5c82e119577f2e5ee57","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5d138006_2e123660","updated":"2026-05-28 13:51:24.000000000","message":"I have 1 issue with the \u0027get-contacts\u0027 script (see my comment inline). It\u0027s not that serious of an issue, but probably it\u0027s better to improve there a bit. (Note that this issue is present without the patch as well 🫤)\n\notherwise, rest of the patch looks completely okay.","commit_id":"fb526d9fdc867ac1d40de37bedcbcec9c0eaa0c7"}],"openstack_releases/cmds/get_contacts.py":[{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"a6ef483371c4c1c88cb6f5c82e119577f2e5ee57","unresolved":true,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        if args.liaisons or args.all:"},{"line_number":85,"context_line":"            for liaison in team_data.liaisons.get(\u0027release\u0027, []):"},{"line_number":86,"context_line":"                contacts.add(Contact(liaison))"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        team_header \u003d \u0027%s Contacts:\u0027 % team_name.title()"},{"line_number":89,"context_line":"        print()"}],"source_content_type":"text/x-python","patch_set":4,"id":"49246f24_52d7994d","line":86,"updated":"2026-05-28 13:51:24.000000000","message":"however, we are using sets for contacts, this unfortunately does not work the proper way, and in case of *distributed* leadership type, the release liaisons are listed twice :/\n(test with team oslo for example)","commit_id":"fb526d9fdc867ac1d40de37bedcbcec9c0eaa0c7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6223a2a96d82558fdbbb841231c88ae045842572","unresolved":false,"context_lines":[{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        if args.liaisons or args.all:"},{"line_number":85,"context_line":"            for liaison in team_data.liaisons.get(\u0027release\u0027, []):"},{"line_number":86,"context_line":"                contacts.add(Contact(liaison))"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        team_header \u003d \u0027%s Contacts:\u0027 % team_name.title()"},{"line_number":89,"context_line":"        print()"}],"source_content_type":"text/x-python","patch_set":4,"id":"fed4c788_a95bddab","line":86,"in_reply_to":"49246f24_52d7994d","updated":"2026-05-28 14:57:38.000000000","message":"Done","commit_id":"fb526d9fdc867ac1d40de37bedcbcec9c0eaa0c7"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"174650903f0a191f1e6a341f0d2cc31198fd9393","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        )"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def __hash__(self) -\u003e int:"},{"line_number":44,"context_line":"        return hash((self.name, self.irc, self.email))"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    def __str__(self):"},{"line_number":47,"context_line":"        return (\"Name     : {0.name}\\n\" +"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f6109f8_3335efd2","line":44,"updated":"2026-05-28 16:03:49.000000000","message":"looks good! yepp, by implementing __hash__ and __eq__ makes this object work with Set \\o/","commit_id":"95a238d1de2aea12b3109f6bffc975fe9c427a7a"}],"tools/check_approval.py":[{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"ac9d899e7e0c6ac90d7580a863e6562339920521","unresolved":true,"context_lines":[{"line_number":108,"context_line":"            # Some teams follow the \"distributed project lead\" governance"},{"line_number":109,"context_line":"            # model so they are PTL-less but they have release liaisons"},{"line_number":110,"context_line":"            # defined. Fetch those liaisons."},{"line_number":111,"context_line":"            liaisons \u003d {}"},{"line_number":112,"context_line":"            if govteam[\u0027leadership_type\u0027] \u003d\u003d \u0027ptl\u0027:"},{"line_number":113,"context_line":"                # Fetch PTL\u0027s email address"},{"line_number":114,"context_line":"                liaisons.add(govteam[\u0027ptl\u0027][\u0027email\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"6c9bed29_0f5ab07b","line":111,"range":{"start_line":111,"start_character":23,"end_line":111,"end_character":25},"updated":"2026-05-19 16:44:41.000000000","message":"`set()` you mean, right? otherwise we get `AttributeError: \u0027dict\u0027 object has no attribute \u0027add\u0027`","commit_id":"0947822d1b176c66a4b8dc532c14b841a753a6fd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7d0c3600c46803408db99bbb36e7fe4506b80e8f","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            # Some teams follow the \"distributed project lead\" governance"},{"line_number":109,"context_line":"            # model so they are PTL-less but they have release liaisons"},{"line_number":110,"context_line":"            # defined. Fetch those liaisons."},{"line_number":111,"context_line":"            liaisons \u003d {}"},{"line_number":112,"context_line":"            if govteam[\u0027leadership_type\u0027] \u003d\u003d \u0027ptl\u0027:"},{"line_number":113,"context_line":"                # Fetch PTL\u0027s email address"},{"line_number":114,"context_line":"                liaisons.add(govteam[\u0027ptl\u0027][\u0027email\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"ac947eb4_281ecc37","line":111,"range":{"start_line":111,"start_character":23,"end_line":111,"end_character":25},"in_reply_to":"6c9bed29_0f5ab07b","updated":"2026-05-19 19:47:06.000000000","message":"Damn, yes. I wish Python used a different bracket character for sets 😭","commit_id":"0947822d1b176c66a4b8dc532c14b841a753a6fd"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"a6ef483371c4c1c88cb6f5c82e119577f2e5ee57","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            # Some teams follow the \"distributed project lead\" governance"},{"line_number":109,"context_line":"            # model so they are PTL-less but they have release liaisons"},{"line_number":110,"context_line":"            # defined. Fetch those liaisons."},{"line_number":111,"context_line":"            liaisons \u003d {}"},{"line_number":112,"context_line":"            if govteam[\u0027leadership_type\u0027] \u003d\u003d \u0027ptl\u0027:"},{"line_number":113,"context_line":"                # Fetch PTL\u0027s email address"},{"line_number":114,"context_line":"                liaisons.add(govteam[\u0027ptl\u0027][\u0027email\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"d9010fd6_b73a63e8","line":111,"range":{"start_line":111,"start_character":23,"end_line":111,"end_character":25},"in_reply_to":"ac947eb4_281ecc37","updated":"2026-05-28 13:51:24.000000000","message":"thanks.","commit_id":"0947822d1b176c66a4b8dc532c14b841a753a6fd"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"ac9d899e7e0c6ac90d7580a863e6562339920521","unresolved":true,"context_lines":[{"line_number":109,"context_line":"            # model so they are PTL-less but they have release liaisons"},{"line_number":110,"context_line":"            # defined. Fetch those liaisons."},{"line_number":111,"context_line":"            liaisons \u003d {}"},{"line_number":112,"context_line":"            if govteam[\u0027leadership_type\u0027] \u003d\u003d \u0027ptl\u0027:"},{"line_number":113,"context_line":"                # Fetch PTL\u0027s email address"},{"line_number":114,"context_line":"                liaisons.add(govteam[\u0027ptl\u0027][\u0027email\u0027])"},{"line_number":115,"context_line":"            if release_liaisons :\u003d govteam.get(\u0027liaisons\u0027, {}).get(\u0027release\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"6feea865_2590beba","line":112,"range":{"start_line":112,"start_character":15,"end_line":112,"end_character":41},"updated":"2026-05-19 16:44:41.000000000","message":"i know if the governance part merges, this should not be an issue, but i\u0027d rather see here `govteam.get(\u0027leadership_type\u0027, {}) \u003d\u003d \u0027ptl\u0027`","commit_id":"0947822d1b176c66a4b8dc532c14b841a753a6fd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"7d0c3600c46803408db99bbb36e7fe4506b80e8f","unresolved":true,"context_lines":[{"line_number":109,"context_line":"            # model so they are PTL-less but they have release liaisons"},{"line_number":110,"context_line":"            # defined. Fetch those liaisons."},{"line_number":111,"context_line":"            liaisons \u003d {}"},{"line_number":112,"context_line":"            if govteam[\u0027leadership_type\u0027] \u003d\u003d \u0027ptl\u0027:"},{"line_number":113,"context_line":"                # Fetch PTL\u0027s email address"},{"line_number":114,"context_line":"                liaisons.add(govteam[\u0027ptl\u0027][\u0027email\u0027])"},{"line_number":115,"context_line":"            if release_liaisons :\u003d govteam.get(\u0027liaisons\u0027, {}).get(\u0027release\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"d6d167e8_c46dfcfd","line":112,"range":{"start_line":112,"start_character":15,"end_line":112,"end_character":41},"in_reply_to":"6feea865_2590beba","updated":"2026-05-19 19:47:06.000000000","message":"This is the Robustness principle and I disagree with it. If someone breaks things for us, we should see that *immediately*. It shouldn\u0027t be able to break since the schema in the related change ensures this key is present (barring a schema change, of course)","commit_id":"0947822d1b176c66a4b8dc532c14b841a753a6fd"},{"author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"change_message_id":"a6ef483371c4c1c88cb6f5c82e119577f2e5ee57","unresolved":false,"context_lines":[{"line_number":109,"context_line":"            # model so they are PTL-less but they have release liaisons"},{"line_number":110,"context_line":"            # defined. Fetch those liaisons."},{"line_number":111,"context_line":"            liaisons \u003d {}"},{"line_number":112,"context_line":"            if govteam[\u0027leadership_type\u0027] \u003d\u003d \u0027ptl\u0027:"},{"line_number":113,"context_line":"                # Fetch PTL\u0027s email address"},{"line_number":114,"context_line":"                liaisons.add(govteam[\u0027ptl\u0027][\u0027email\u0027])"},{"line_number":115,"context_line":"            if release_liaisons :\u003d govteam.get(\u0027liaisons\u0027, {}).get(\u0027release\u0027):"}],"source_content_type":"text/x-python","patch_set":1,"id":"2245568f_7c8d09df","line":112,"range":{"start_line":112,"start_character":15,"end_line":112,"end_character":41},"in_reply_to":"d6d167e8_c46dfcfd","updated":"2026-05-28 13:51:24.000000000","message":"Acknowledged","commit_id":"0947822d1b176c66a4b8dc532c14b841a753a6fd"}]}
