)]}'
{".agents/neutron-code-review.md":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8a8c367225c49d7ad8afb26ec8c7e20cb68079d1","unresolved":true,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"## API Changes"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- Must have test coverage in `neutron-tempest-plugin` or Tempest."},{"line_number":33,"context_line":"- At minimum one API test; prefer both API and scenario tests."},{"line_number":34,"context_line":"- Scenario tests should cover real-world usage (e.g. instances using new networking, migration)."}],"source_content_type":"text/x-markdown","patch_set":1,"id":"f3e6285a_fad20e1a","line":31,"updated":"2026-07-06 15:07:24.000000000","message":"To add: https://github.com/openstack/neutron/blob/master/doc/source/contributor/testing/tempest.rst#api-tests","commit_id":"995eeaf2f60efa9b90e58c9683bffd44badd4c0b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"43e7d8bdca020a4ba2a54b1cd14284cadca00780","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"## API Changes"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"- Must have test coverage in `neutron-tempest-plugin` or Tempest."},{"line_number":33,"context_line":"- At minimum one API test; prefer both API and scenario tests."},{"line_number":34,"context_line":"- Scenario tests should cover real-world usage (e.g. instances using new networking, migration)."}],"source_content_type":"text/x-markdown","patch_set":1,"id":"cd1d58f8_74b04f4a","line":31,"in_reply_to":"f3e6285a_fad20e1a","updated":"2026-07-07 09:23:59.000000000","message":"Done","commit_id":"995eeaf2f60efa9b90e58c9683bffd44badd4c0b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9e8077efc4c8d8477bd9b4aa913c6b376f8e674e","unresolved":true,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"## ML2/OVN Specifics"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"- The contributor guide is in [controibutor](doc/source/contributor/ovn/index.rst)"},{"line_number":65,"context_line":"- OVS-related OVSDB commands live in the `ovsdbapp` library. Neutron also implements local"},{"line_number":66,"context_line":"  commands defined in `neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/api.py` and"},{"line_number":67,"context_line":"  implemented in `neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py`."}],"source_content_type":"text/x-markdown","patch_set":3,"id":"52c4b7ce_158f8274","line":64,"range":{"start_line":64,"start_character":31,"end_line":64,"end_character":43},"updated":"2026-07-08 14:28:04.000000000","message":"s/contributor","commit_id":"7ff8e31a87cbb02aad6a9e619ab6b67c93ed8421"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c675ffe19eccc7a962a14b3dd1e5b25e186b9a74","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":"## ML2/OVN Specifics"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"- The contributor guide is in [controibutor](doc/source/contributor/ovn/index.rst)"},{"line_number":65,"context_line":"- OVS-related OVSDB commands live in the `ovsdbapp` library. Neutron also implements local"},{"line_number":66,"context_line":"  commands defined in `neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/api.py` and"},{"line_number":67,"context_line":"  implemented in `neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py`."}],"source_content_type":"text/x-markdown","patch_set":3,"id":"380908c2_3e519679","line":64,"range":{"start_line":64,"start_character":31,"end_line":64,"end_character":43},"in_reply_to":"52c4b7ce_158f8274","updated":"2026-07-09 06:54:24.000000000","message":"Done","commit_id":"7ff8e31a87cbb02aad6a9e619ab6b67c93ed8421"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9e8077efc4c8d8477bd9b4aa913c6b376f8e674e","unresolved":true,"context_lines":[{"line_number":66,"context_line":"  commands defined in `neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/api.py` and"},{"line_number":67,"context_line":"  implemented in `neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py`."},{"line_number":68,"context_line":"- If a new method is locally implemented in Neutron, check if that could be rehomed to"},{"line_number":69,"context_line":"  `ovsdbapp`."},{"line_number":70,"context_line":"- Check that all OVN commands are actually executed, by calling `execute(check_error\u003dTrue)` or"},{"line_number":71,"context_line":"  adding it to a transaction, inside a transaction context."},{"line_number":72,"context_line":"- When an OVN IDL event is attended by the Neutron API, check what worker will attend this event,"}],"source_content_type":"text/x-markdown","patch_set":3,"id":"4932a4fd_fa12034e","line":69,"updated":"2026-07-08 14:28:04.000000000","message":"On a related note I wonder if we should add something about rehoming things to neutron-lib, just not OVN-specific.","commit_id":"7ff8e31a87cbb02aad6a9e619ab6b67c93ed8421"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c675ffe19eccc7a962a14b3dd1e5b25e186b9a74","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  commands defined in `neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/api.py` and"},{"line_number":67,"context_line":"  implemented in `neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py`."},{"line_number":68,"context_line":"- If a new method is locally implemented in Neutron, check if that could be rehomed to"},{"line_number":69,"context_line":"  `ovsdbapp`."},{"line_number":70,"context_line":"- Check that all OVN commands are actually executed, by calling `execute(check_error\u003dTrue)` or"},{"line_number":71,"context_line":"  adding it to a transaction, inside a transaction context."},{"line_number":72,"context_line":"- When an OVN IDL event is attended by the Neutron API, check what worker will attend this event,"}],"source_content_type":"text/x-markdown","patch_set":3,"id":"863ca7be_a74fe724","line":69,"in_reply_to":"4932a4fd_fa12034e","updated":"2026-07-09 06:54:24.000000000","message":"I\u0027ll move this to a general section.","commit_id":"7ff8e31a87cbb02aad6a9e619ab6b67c93ed8421"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"1bcda195751e3672bdf01e67477665db31794c66","unresolved":false,"context_lines":[{"line_number":66,"context_line":"  commands defined in `neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/api.py` and"},{"line_number":67,"context_line":"  implemented in `neutron/plugins/ml2/drivers/ovn/mech_driver/ovsdb/impl_idl_ovn.py`."},{"line_number":68,"context_line":"- If a new method is locally implemented in Neutron, check if that could be rehomed to"},{"line_number":69,"context_line":"  `ovsdbapp`."},{"line_number":70,"context_line":"- Check that all OVN commands are actually executed, by calling `execute(check_error\u003dTrue)` or"},{"line_number":71,"context_line":"  adding it to a transaction, inside a transaction context."},{"line_number":72,"context_line":"- When an OVN IDL event is attended by the Neutron API, check what worker will attend this event,"}],"source_content_type":"text/x-markdown","patch_set":3,"id":"ae5ecfc5_acf33a7c","line":69,"in_reply_to":"863ca7be_a74fe724","updated":"2026-07-09 07:09:08.000000000","message":"Claude output: `## Code Rehoming`","commit_id":"7ff8e31a87cbb02aad6a9e619ab6b67c93ed8421"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"2b457ecf01cdcc60a90ecd4b0708e785f659c903","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e0420c8f_4616bdfc","updated":"2026-07-07 13:50:23.000000000","message":"recheck neutron-ovs-tempest-dvr-ha-multinode-full","commit_id":"cf0ad6e054fa49117dd0878358c906d08ca3adae"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9e8077efc4c8d8477bd9b4aa913c6b376f8e674e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"52235340_85ed319c","updated":"2026-07-08 14:28:04.000000000","message":"One typo","commit_id":"7ff8e31a87cbb02aad6a9e619ab6b67c93ed8421"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"0869d45d0c922a3671489ec68c008b844723fb03","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"012acfe1_db64f373","updated":"2026-07-15 08:46:05.000000000","message":"recheck neutron-ovs-tempest-dvr-ha-multinode-full","commit_id":"10a317fb617530e9d36cd470fc3f7fea02b18148"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"8279c2e15067d8d616bd1f790d22c1c9d6047605","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"93568748_caa0e1ea","updated":"2026-07-17 07:17:07.000000000","message":"recheck neutron-ovs-tempest-dvr-ha-multinode-full","commit_id":"10a317fb617530e9d36cd470fc3f7fea02b18148"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d3d9b137da0dc159f582ee9d594c87d2f3499fd3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"62653d33_e6cb8ef9","updated":"2026-07-15 08:47:11.000000000","message":"recheck neutron-tempest-plugin-ovn","commit_id":"10a317fb617530e9d36cd470fc3f7fea02b18148"}],"HACKING.rst":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"423f5789632fae64c7c9940cf6200f310c5f0c40","unresolved":true,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    tox -e cover"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"The coverage report will fail if the overall coverage drops below 80%."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"To generate sample configuration files::"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"234987da_54a6894a","line":106,"range":{"start_line":106,"start_character":66,"end_line":106,"end_character":69},"updated":"2026-07-07 14:10:03.000000000","message":"not that we change it that much but can we just describe this as \"look what --fail-under\u003dXX is currently at in tox.ini\" type language? not sure if AI will understand that though","commit_id":"cf0ad6e054fa49117dd0878358c906d08ca3adae"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d2a39e8d311d9ea64a97f5aa4831612415736116","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    tox -e cover"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"The coverage report will fail if the overall coverage drops below 80%."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"To generate sample configuration files::"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"e6a1439d_c22abbea","line":106,"range":{"start_line":106,"start_character":66,"end_line":106,"end_character":69},"in_reply_to":"234987da_54a6894a","updated":"2026-07-07 14:34:48.000000000","message":"Done","commit_id":"cf0ad6e054fa49117dd0878358c906d08ca3adae"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"74adc8124ffb5cc4affb8e5ff108c1bbede533cf","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    tox -e cover"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"The coverage report will fail if the overall coverage drops below 80%."},{"line_number":107,"context_line":""},{"line_number":108,"context_line":"To generate sample configuration files::"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"ab40a729_68028748","line":106,"range":{"start_line":106,"start_character":66,"end_line":106,"end_character":69},"in_reply_to":"e6a1439d_c22abbea","updated":"2026-07-07 14:39:25.000000000","message":"Claude is so good that just explaining what I want to write here (but crudely), it rewrites everything in a fantastic way...","commit_id":"cf0ad6e054fa49117dd0878358c906d08ca3adae"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9e8077efc4c8d8477bd9b4aa913c6b376f8e674e","unresolved":true,"context_lines":[{"line_number":59,"context_line":"The testing system is based on a combination of tox and stestr. The canonical"},{"line_number":60,"context_line":"approach to running tests is to simply run the command ``tox``. This will"},{"line_number":61,"context_line":"create virtual environments, populate them with dependencies and run all of"},{"line_number":62,"context_line":"the tests that OpenStack CI systems run. Behind the scenes, tox is running"},{"line_number":63,"context_line":"``stestr run``, but is set up such that you can supply any additional"},{"line_number":64,"context_line":"stestr arguments that are needed to tox. For example, you can run:"},{"line_number":65,"context_line":"``tox -- --analyze-isolation`` to cause tox to tell stestr to add"}],"source_content_type":"text/x-rst","patch_set":3,"id":"d574f092_1917606e","line":62,"range":{"start_line":62,"start_character":10,"end_line":62,"end_character":14},"updated":"2026-07-08 14:28:04.000000000","message":"s/that the","commit_id":"7ff8e31a87cbb02aad6a9e619ab6b67c93ed8421"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"c675ffe19eccc7a962a14b3dd1e5b25e186b9a74","unresolved":false,"context_lines":[{"line_number":59,"context_line":"The testing system is based on a combination of tox and stestr. The canonical"},{"line_number":60,"context_line":"approach to running tests is to simply run the command ``tox``. This will"},{"line_number":61,"context_line":"create virtual environments, populate them with dependencies and run all of"},{"line_number":62,"context_line":"the tests that OpenStack CI systems run. Behind the scenes, tox is running"},{"line_number":63,"context_line":"``stestr run``, but is set up such that you can supply any additional"},{"line_number":64,"context_line":"stestr arguments that are needed to tox. For example, you can run:"},{"line_number":65,"context_line":"``tox -- --analyze-isolation`` to cause tox to tell stestr to add"}],"source_content_type":"text/x-rst","patch_set":3,"id":"7a5f1843_043da1bd","line":62,"range":{"start_line":62,"start_character":10,"end_line":62,"end_character":14},"in_reply_to":"d574f092_1917606e","updated":"2026-07-09 06:54:24.000000000","message":"Done","commit_id":"7ff8e31a87cbb02aad6a9e619ab6b67c93ed8421"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"fd2d2a49a48461cd94efb564b12fc88ff0cdbb62","unresolved":true,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"To run functional tests that do not require sudo privileges::"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    tox -e functional"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"To run unit tests with coverage reporting::"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"463667ad_1daa47d4","line":100,"range":{"start_line":100,"start_character":4,"end_line":100,"end_character":21},"updated":"2026-07-09 12:18:07.000000000","message":"but for this you need an env where tools/configure_for_func_testing.sh was executed","commit_id":"854f4775d371602af6875a19def61dd6f0c112e7"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"122ffca65e0beebca4feec199ac6fc5d77ad137c","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"To run functional tests that do not require sudo privileges::"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    tox -e functional"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"To run unit tests with coverage reporting::"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-rst","patch_set":4,"id":"fa6fe3d3_ca537422","line":100,"range":{"start_line":100,"start_character":4,"end_line":100,"end_character":21},"in_reply_to":"463667ad_1daa47d4","updated":"2026-07-14 09:55:32.000000000","message":"Right, let me update this","commit_id":"854f4775d371602af6875a19def61dd6f0c112e7"}]}
