)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"545a77bd547b80ab8357978322d0ec9632c0ffe7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"702bdf2e_531e47b4","updated":"2026-04-16 20:06:27.000000000","message":"Actually, a comment based on a later patch in the series","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"5913d4fe01dc3f850dd264d669a188e2c3d56116","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"adce95da_c936b624","updated":"2026-04-17 07:21:22.000000000","message":"I have nothing to comment here but say thanks for this patch.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0501f19fc5e92c7c4e81b9ebe12309680b126f4d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b2ccbda9_03dc7a21","updated":"2026-04-17 11:23:06.000000000","message":"I haven\u0027t commented on the bulk of the changes here and think most of them warrant discussion. The only exception is the markdown/rst thing.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6db1e4195c2484ea6293711f75f960bfae53095a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4569b5f1_0842f19b","updated":"2026-04-17 09:43:46.000000000","message":"I\u0027ve thought about this more, and I\u0027m now pretty sure we shouldn\u0027t be using different markup formats or duplicating information.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"024354e1c3cb9f2ef7736f1feeded7737ba9be10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"ffc97df0_b29c4a54","updated":"2026-04-17 09:40:07.000000000","message":"this is a chicken-and-egg problem. I\u0027d want people to review this patch for accepting my structure proposal and the design tenets but if we don\u0027t merge it, contributors can\u0027t really create new proposals for this repo.\nMerging it now, but of course if you have some concerns, please provide a new Gerrit patch for modifying the files if you want so then we can discuss it there.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d74113d9c5bb9e79d239ecaf557f6c91ac9bcea7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f470f99b_9861aeb7","in_reply_to":"4569b5f1_0842f19b","updated":"2026-04-17 09:48:39.000000000","message":"OK, thanks for adding this comments, I\u0027ll create a new follow-up patch then for your modifications, so we can review them.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"89f78b670846046bf2b8bd7507c1dbef12894fd5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c8b2b8c7_a61a4782","in_reply_to":"4f26a280_79f9f7cf","updated":"2026-04-17 09:56:26.000000000","message":"https://review.opendev.org/c/openstack/agentic-workflows/+/985078","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8fa9acaf190c5a810c3ed682ae1474d7a9276ffd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"38c015f8_80276351","in_reply_to":"c8628932_1f01ad43","updated":"2026-04-17 10:30:04.000000000","message":"sorry, I didn\u0027t wanted to force the gun, I just wanted to have a few files in the repo for new contributors to be able to understand what we were working, because I see some folks already looking at them. Sorry for the merge but I\u0027m now reviewing your patch.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"8fa9acaf190c5a810c3ed682ae1474d7a9276ffd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"722248d0_5c4e61f7","in_reply_to":"c8b2b8c7_a61a4782","updated":"2026-04-17 10:30:04.000000000","message":"Reviewing it now.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9589cfe20734fdf2ab4400a8de88a77efa7d8949","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"4f26a280_79f9f7cf","in_reply_to":"f470f99b_9861aeb7","updated":"2026-04-17 09:55:59.000000000","message":"We should have been reviewing them here, @sbauza@redhat.com. You\u0027ve jumped the gun in merging this.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9589cfe20734fdf2ab4400a8de88a77efa7d8949","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c8628932_1f01ad43","in_reply_to":"ffc97df0_b29c4a54","updated":"2026-04-17 09:55:59.000000000","message":"Our forum for discussing changes is Gerrit reviews. You wouldn\u0027t go and merge a new feature into Nova while it was still undergoing review and say people can submit follow-up patches to fix any issues. I don\u0027t understand why it was acceptable to do so here?","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"}],"README.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"545a77bd547b80ab8357978322d0ec9632c0ffe7","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Agentic Workflows"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"8e58145c_48f0365a","line":1,"updated":"2026-04-16 20:06:27.000000000","message":"Would it make more sense to use `README.md` instead here, since (a) we\u0027re not using Python here and (b) markdown is unfortunately the chosen markup format for agents.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9589cfe20734fdf2ab4400a8de88a77efa7d8949","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Agentic Workflows"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"c99c6a89_15d778a5","line":1,"in_reply_to":"22ef497d_875d6ff3","updated":"2026-04-17 09:55:59.000000000","message":"Done","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6db1e4195c2484ea6293711f75f960bfae53095a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Agentic Workflows"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"22ef497d_875d6ff3","line":1,"in_reply_to":"53af393b_56e937a3","updated":"2026-04-17 09:43:46.000000000","message":"Let me try a different tack: what do we **gain** by having separate formats used here? I understand your point, however, just because it\u0027s human readable should not stop us from using Markdown here. We are not doing anything here that significantly benefits from the increased power of reStructuredText. And I believe it would be very confusing to have two separate plaintext markup formats used in the repo.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cddb6905a91dd960a724ff6a6f4da5bfe663197a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Agentic Workflows"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"ba64cfd1_e9b712df","line":1,"in_reply_to":"53af393b_56e937a3","updated":"2026-04-17 11:04:04.000000000","message":"i don\u0027t really mind about the format in gerneal but i think we shoudl continue to use RST for all our documention \n\nthe AGENTS.md is special as it more \"code\" then doc.\n\n\nhowever we shoudl avoid duplications.\n\nLLMs can and should read the docs and they really dont care if it in markdown rst or pdf  the only issue with the latter is obviously token usage.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"99034aae4d42531116eaffcb134cc953be18526c","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Agentic Workflows"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"53af393b_56e937a3","line":1,"in_reply_to":"8e58145c_48f0365a","updated":"2026-04-16 20:29:47.000000000","message":"thanks for your review ! \nNope, sorry, there is a difference between README.rst which is intended to be read and consumed by humans (following the OpenStack principles) while AGENTS.md is purely intended to be consumed by LLMs (but of course humans can read it).\n\nThis is why I want to keep the RestructuredText format here 😉","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0501f19fc5e92c7c4e81b9ebe12309680b126f4d","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Agentic Workflows"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"c2ba609c_d5ec2d59","line":1,"in_reply_to":"ba64cfd1_e9b712df","updated":"2026-04-17 11:23:06.000000000","message":"\u003e i don\u0027t really mind about the format in gerneal but i think we shoudl continue to use RST for all our documention \n\nI don\u0027t agree. I would agree if we had a proper Sphinx doc tree here, but we don\u0027t. Using separate formats is confusing, and we\u0027re already stuck with Markdown for virtually every other file in this repo.\n\n\u003e the AGENTS.md is special as it more \"code\" then doc.\n\u003e \n\u003e \n\u003e however we shoudl avoid duplications.\n\u003e \n\u003e LLMs can and should read the docs and they really dont care if it in markdown rst or pdf  the only issue with the latter is obviously token usage.\n\nAgents don\u0027t care, but humans do. Different markup formats within a single repo is entirely unnecessary load for no good reason. We should be consistent with other repos, but we should prioritise local consistency over this.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6ecf4e8c725b0298b93680dc1639146847058b47","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Agentic Workflows"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"f4bd4a35_d4b524e3","line":1,"in_reply_to":"ba64cfd1_e9b712df","updated":"2026-04-17 11:20:33.000000000","message":"for now, let\u0027s start with markdown given we now have it, but we could also work on docs with RST format if we want.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7a67430584bd57ccd68a2e19cf250a73612953b7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Agentic Workflows"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"98a2edcf_1a481923","line":1,"in_reply_to":"c2ba609c_d5ec2d59","updated":"2026-04-17 14:36:40.000000000","message":"ack as i said im fine with markdown allghouth it diverges form all our other job toooling but for right now i guess we dont have an expectation of publishing docs.\n\nso we cna revisit if that changes.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cddb6905a91dd960a724ff6a6f4da5bfe663197a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Agentic Workflows"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Skills, personas, and rules for AI-assisted OpenStack development, built on the"},{"line_number":6,"context_line":"`Agent Skills \u003chttps://agentskills.io/\u003e`_ open format."}],"source_content_type":"text/x-rst","patch_set":1,"id":"46104c9a_370f2282","line":3,"updated":"2026-04-17 11:04:04.000000000","message":"we shoudl get pre-commit and sphinx lint on this repo as one of the first steps to \ncatch things like this\n\ni can createa patch to do that efficently.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"0501f19fc5e92c7c4e81b9ebe12309680b126f4d","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Agentic Workflows"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Skills, personas, and rules for AI-assisted OpenStack development, built on the"},{"line_number":6,"context_line":"`Agent Skills \u003chttps://agentskills.io/\u003e`_ open format."}],"source_content_type":"text/x-rst","patch_set":1,"id":"4c53417f_946ecdf0","line":3,"in_reply_to":"46104c9a_370f2282","updated":"2026-04-17 11:23:06.000000000","message":"This isn\u0027t an issue with Markdown. We can use a markdown linter though, if you had a suggestion.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6ecf4e8c725b0298b93680dc1639146847058b47","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Agentic Workflows"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Skills, personas, and rules for AI-assisted OpenStack development, built on the"},{"line_number":6,"context_line":"`Agent Skills \u003chttps://agentskills.io/\u003e`_ open format."}],"source_content_type":"text/x-rst","patch_set":1,"id":"96496035_37d0f370","line":3,"in_reply_to":"46104c9a_370f2282","updated":"2026-04-17 11:20:33.000000000","message":"would be great !","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7a67430584bd57ccd68a2e19cf250a73612953b7","unresolved":true,"context_lines":[{"line_number":1,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":2,"context_line":"OpenStack Agentic Workflows"},{"line_number":3,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"Skills, personas, and rules for AI-assisted OpenStack development, built on the"},{"line_number":6,"context_line":"`Agent Skills \u003chttps://agentskills.io/\u003e`_ open format."}],"source_content_type":"text/x-rst","patch_set":1,"id":"24517644_85efcd3a","line":3,"in_reply_to":"4c53417f_946ecdf0","updated":"2026-04-17 14:36:40.000000000","message":"i use https://github.com/DavidAnson/markdownlint-cli2\nin https://github.com/SeanMooney/openstack-ai-style-guide\n\nthe hook defintion is \n\n- id: markdownlint-cli2\n  name: markdownlint-cli2\n  description: \"Checks the style of Markdown/CommonMark files.\"\n  entry: markdownlint-cli2\n  language: node\n  types: [markdown]\n  \n\nwhich im not sure we want the node depency for\n\nthere is also a docer version of this but\nthat tbd i guess\n\nthe main things we shoudl focus on is defintly the validation of the files used by ai.\n\nwaht is proably more useful is to encode\n\nhttps://github.com/SeanMooney/openstack-ai-style-guide/blob/master/references/MarkdownLintRules.md \n\nin knowlageage/overalys/langugues/markdown.md\n\nor as a topic doc\n\nand jsut have a skill or the AGENTS.md ensure it foles the convetions when writing docuemnts.\n\nthat is an derived form \n\nhttps://github.com/markdownlint/markdownlint/blob/main/docs/RULES.md?plain\u003d1\n\nthe skils validate can help cover much fo this gap.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cddb6905a91dd960a724ff6a6f4da5bfe663197a","unresolved":true,"context_lines":[{"line_number":33,"context_line":"**Persona**"},{"line_number":34,"context_line":"  A reusable agent role definition that encodes domain expertise (e.g. a core"},{"line_number":35,"context_line":"  reviewer persona, a security reviewer persona). Skills can invoke personas"},{"line_number":36,"context_line":"  automatically as subagents when specialized knowledge is needed. Users can"},{"line_number":37,"context_line":"  also invoke personas directly in conversation -- see"},{"line_number":38,"context_line":"  `Using Personas with AI Clients`_ for examples."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"59fee1cb_970cdd5b","line":36,"range":{"start_line":36,"start_character":19,"end_line":36,"end_character":28},"updated":"2026-04-17 11:04:04.000000000","message":"so they can however this is one of the topic i wanted to discuss\n\n\nwhile skills have been widely adopted subagent are less portable and several agent don\u0027t support them\n\ni really do like using subagent to encapsolate knowlage/context bondareis so im not saying we shoudl not use them but im just noting that  skills are the most portable then subagent and finally slash commnad are the least portable.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6ecf4e8c725b0298b93680dc1639146847058b47","unresolved":true,"context_lines":[{"line_number":33,"context_line":"**Persona**"},{"line_number":34,"context_line":"  A reusable agent role definition that encodes domain expertise (e.g. a core"},{"line_number":35,"context_line":"  reviewer persona, a security reviewer persona). Skills can invoke personas"},{"line_number":36,"context_line":"  automatically as subagents when specialized knowledge is needed. Users can"},{"line_number":37,"context_line":"  also invoke personas directly in conversation -- see"},{"line_number":38,"context_line":"  `Using Personas with AI Clients`_ for examples."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"c4841fb2_c74169b3","line":36,"range":{"start_line":36,"start_character":19,"end_line":36,"end_character":28},"in_reply_to":"59fee1cb_970cdd5b","updated":"2026-04-17 11:20:33.000000000","message":"that section has been dropped from the readme, but still present in AGENTS.md\nMy personal take on that is that subagents work with agentskills-supported CLIs and I wrote how to use those directly if people want. I don\u0027t think we should limit our usage of subagents but that can be discussed on a per-skill point.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7a67430584bd57ccd68a2e19cf250a73612953b7","unresolved":false,"context_lines":[{"line_number":33,"context_line":"**Persona**"},{"line_number":34,"context_line":"  A reusable agent role definition that encodes domain expertise (e.g. a core"},{"line_number":35,"context_line":"  reviewer persona, a security reviewer persona). Skills can invoke personas"},{"line_number":36,"context_line":"  automatically as subagents when specialized knowledge is needed. Users can"},{"line_number":37,"context_line":"  also invoke personas directly in conversation -- see"},{"line_number":38,"context_line":"  `Using Personas with AI Clients`_ for examples."},{"line_number":39,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"91069089_837ca5c5","line":36,"range":{"start_line":36,"start_character":19,"end_line":36,"end_character":28},"in_reply_to":"c4841fb2_c74169b3","updated":"2026-04-17 14:36:40.000000000","message":"Acknowledged","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cddb6905a91dd960a724ff6a6f4da5bfe663197a","unresolved":true,"context_lines":[{"line_number":37,"context_line":"  also invoke personas directly in conversation -- see"},{"line_number":38,"context_line":"  `Using Personas with AI Clients`_ for examples."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"**Rule**"},{"line_number":41,"context_line":"  Behavioral guidelines that shape how the agent operates (e.g. coding"},{"line_number":42,"context_line":"  conventions, review standards, communication style)."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"**Knowledge**"},{"line_number":45,"context_line":"  Project reference files (architecture, versioning rules, subsystem maps) that"}],"source_content_type":"text/x-rst","patch_set":1,"id":"69c53cbf_bc409cf0","line":42,"range":{"start_line":40,"start_character":1,"end_line":42,"end_character":54},"updated":"2026-04-17 11:04:04.000000000","message":"these shoudl be encoded only in docs not markdown or agent only form","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6ecf4e8c725b0298b93680dc1639146847058b47","unresolved":true,"context_lines":[{"line_number":37,"context_line":"  also invoke personas directly in conversation -- see"},{"line_number":38,"context_line":"  `Using Personas with AI Clients`_ for examples."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"**Rule**"},{"line_number":41,"context_line":"  Behavioral guidelines that shape how the agent operates (e.g. coding"},{"line_number":42,"context_line":"  conventions, review standards, communication style)."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"**Knowledge**"},{"line_number":45,"context_line":"  Project reference files (architecture, versioning rules, subsystem maps) that"}],"source_content_type":"text/x-rst","patch_set":1,"id":"aae4f2ee_373edf31","line":42,"range":{"start_line":40,"start_character":1,"end_line":42,"end_character":54},"in_reply_to":"69c53cbf_bc409cf0","updated":"2026-04-17 11:20:33.000000000","message":"I\u0027d want the LLM to be teached about some guidelines.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cddb6905a91dd960a724ff6a6f4da5bfe663197a","unresolved":true,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":".. code-block:: text"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"   .agents/"},{"line_number":56,"context_line":"   └── skills/                    # All skills (agentskills format)"},{"line_number":57,"context_line":"       ├── code-review/"},{"line_number":58,"context_line":"       │   └── SKILL.md"}],"source_content_type":"text/x-rst","patch_set":1,"id":"675b1715_01d7a8fa","line":55,"updated":"2026-04-17 11:04:04.000000000","message":"so this is inlien whith want i was goign to propse\n\nwith the addtion of a marketplace/plugin defintion so its trivially installable\n\ni can create those in a follwo up","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6ecf4e8c725b0298b93680dc1639146847058b47","unresolved":true,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":".. code-block:: text"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"   .agents/"},{"line_number":56,"context_line":"   └── skills/                    # All skills (agentskills format)"},{"line_number":57,"context_line":"       ├── code-review/"},{"line_number":58,"context_line":"       │   └── SKILL.md"}],"source_content_type":"text/x-rst","patch_set":1,"id":"f7e41f82_aecaa781","line":55,"in_reply_to":"675b1715_01d7a8fa","updated":"2026-04-17 11:20:33.000000000","message":"cool, I\u0027ll review it.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cddb6905a91dd960a724ff6a6f4da5bfe663197a","unresolved":true,"context_lines":[{"line_number":60,"context_line":"       │   └── SKILL.md"},{"line_number":61,"context_line":"       ├── triage/"},{"line_number":62,"context_line":"       │   └── SKILL.md"},{"line_number":63,"context_line":"       └── ..."},{"line_number":64,"context_line":"   personas/                      # Reusable agent personas"},{"line_number":65,"context_line":"   rules/                         # Behavioral rules"},{"line_number":66,"context_line":"   knowledge/                     # Project reference files (optional)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"AI clients discover all skills at once from the top-level ``.agents/skills/``"},{"line_number":69,"context_line":"path defined by the Agent Skills specification."}],"source_content_type":"text/x-rst","patch_set":1,"id":"759d587b_773e0bfd","line":66,"range":{"start_line":63,"start_character":0,"end_line":66,"end_character":70},"updated":"2026-04-17 11:04:04.000000000","message":"these however i don\u0027t think shoudl be at the top level like this\nwe shoudl have a docs folder where we encode knowledge in a consie way with a token optimised routing index to enable agentic rag.\n\ni have not fully implemented that here but its was something i had state working on.\nhttps://github.com/SeanMooney/openstack-ai-style-guide/tree/master/docs/knowledge\n\nbut in other porject i have found \n\nhttps://github.com/SeanMooney/soileir/blob/master/manifest.toon\nhttps://github.com/SeanMooney/grt/blob/master/manifest.toon\n\nwhich uses toon format which was explcity devleop to be more token efficne\nthen json or other formats\n\nhttps://github.com/toon-format/spec/blob/main/SPEC.md\n\nto allow trivial agentic rag works well.\n\nits also trivial to have a skill or agent maintian that but also there are now serialiser for ti in python/go/rust ectra so it would be very to have a tiny script that will just auto generate it for us deterministicly","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6ecf4e8c725b0298b93680dc1639146847058b47","unresolved":true,"context_lines":[{"line_number":60,"context_line":"       │   └── SKILL.md"},{"line_number":61,"context_line":"       ├── triage/"},{"line_number":62,"context_line":"       │   └── SKILL.md"},{"line_number":63,"context_line":"       └── ..."},{"line_number":64,"context_line":"   personas/                      # Reusable agent personas"},{"line_number":65,"context_line":"   rules/                         # Behavioral rules"},{"line_number":66,"context_line":"   knowledge/                     # Project reference files (optional)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"AI clients discover all skills at once from the top-level ``.agents/skills/``"},{"line_number":69,"context_line":"path defined by the Agent Skills specification."}],"source_content_type":"text/x-rst","patch_set":1,"id":"063d62ec_fb33d9f9","line":66,"range":{"start_line":63,"start_character":0,"end_line":66,"end_character":70},"in_reply_to":"759d587b_773e0bfd","updated":"2026-04-17 11:20:33.000000000","message":"project reference files should be at the top-level as they could be moved to service repositories if the community agrees to.\nRules and personas can be shared across skills, so that\u0027s why I think they should be top-level too.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cddb6905a91dd960a724ff6a6f4da5bfe663197a","unresolved":true,"context_lines":[{"line_number":66,"context_line":"   knowledge/                     # Project reference files (optional)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"AI clients discover all skills at once from the top-level ``.agents/skills/``"},{"line_number":69,"context_line":"path defined by the Agent Skills specification."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Knowledge files may alternatively live in the target project\u0027s own repository"},{"line_number":72,"context_line":"(e.g. ``nova/.agents/knowledge/nova.md``). Skills resolve knowledge dynamically"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c20e4b14_d02613c9","line":69,"updated":"2026-04-17 11:04:04.000000000","message":"that would only work if you were in this repo.\n\nthat why we need to also suprot think liek marketplace/plugin fiels for distibution and document how to copy/install these to yoru tools user level skills ectra.\n\nso that if im in my nova or devstack or neutron repo i can invoke the skill","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6ecf4e8c725b0298b93680dc1639146847058b47","unresolved":true,"context_lines":[{"line_number":66,"context_line":"   knowledge/                     # Project reference files (optional)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"AI clients discover all skills at once from the top-level ``.agents/skills/``"},{"line_number":69,"context_line":"path defined by the Agent Skills specification."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Knowledge files may alternatively live in the target project\u0027s own repository"},{"line_number":72,"context_line":"(e.g. ``nova/.agents/knowledge/nova.md``). Skills resolve knowledge dynamically"}],"source_content_type":"text/x-rst","patch_set":1,"id":"6b1f3c69_4adb742e","line":69,"in_reply_to":"c20e4b14_d02613c9","updated":"2026-04-17 11:20:33.000000000","message":"there are many ways to consume those skills (Cursor, Claude, Codex...) but the idea is that this project provides skills like any other, hence following the Agent SKills spec.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cddb6905a91dd960a724ff6a6f4da5bfe663197a","unresolved":true,"context_lines":[{"line_number":69,"context_line":"path defined by the Agent Skills specification."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Knowledge files may alternatively live in the target project\u0027s own repository"},{"line_number":72,"context_line":"(e.g. ``nova/.agents/knowledge/nova.md``). Skills resolve knowledge dynamically"},{"line_number":73,"context_line":"and will look in both locations."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Getting Started"}],"source_content_type":"text/x-rst","patch_set":1,"id":"c4cc95de_1df6fd62","line":72,"updated":"2026-04-17 11:04:04.000000000","message":"im kind of -1 on the ideal fo ahving agent only knowlage files in repos\n\nbut i think we can define a way for repos to insturct agent to retive knowladge form the repo i.e. by readign parts of there docs or  HACKING.rst\n\nso this is speciflcy something that need wider dicsusion before we commit too implementing.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6ecf4e8c725b0298b93680dc1639146847058b47","unresolved":true,"context_lines":[{"line_number":69,"context_line":"path defined by the Agent Skills specification."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Knowledge files may alternatively live in the target project\u0027s own repository"},{"line_number":72,"context_line":"(e.g. ``nova/.agents/knowledge/nova.md``). Skills resolve knowledge dynamically"},{"line_number":73,"context_line":"and will look in both locations."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Getting Started"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3a590778_00090a48","line":72,"in_reply_to":"c4cc95de_1df6fd62","updated":"2026-04-17 11:20:33.000000000","message":"I guess that discussion will happen on the skills implementation patches themselves.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6db1e4195c2484ea6293711f75f960bfae53095a","unresolved":true,"context_lines":[{"line_number":20,"context_line":"project, they dynamically resolve project context at invocation time. When you"},{"line_number":21,"context_line":"invoke a skill, it asks which project you are working on (or infers it from"},{"line_number":22,"context_line":"context), then loads the appropriate knowledge and personas."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Concepts"},{"line_number":25,"context_line":"--------"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"**Skill**"},{"line_number":28,"context_line":"  The primary unit of functionality, following the `Agent Skills specification"},{"line_number":29,"context_line":"  \u003chttps://agentskills.io/specification\u003e`_. A skill is a directory containing a"},{"line_number":30,"context_line":"  ``SKILL.md`` file (YAML frontmatter + markdown instructions), plus optional"},{"line_number":31,"context_line":"  ``scripts/``, ``references/``, and ``assets/`` subdirectories."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"**Persona**"},{"line_number":34,"context_line":"  A reusable agent role definition that encodes domain expertise (e.g. a core"},{"line_number":35,"context_line":"  reviewer persona, a security reviewer persona). Skills can invoke personas"},{"line_number":36,"context_line":"  automatically as subagents when specialized knowledge is needed. Users can"},{"line_number":37,"context_line":"  also invoke personas directly in conversation -- see"},{"line_number":38,"context_line":"  `Using Personas with AI Clients`_ for examples."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"**Rule**"},{"line_number":41,"context_line":"  Behavioral guidelines that shape how the agent operates (e.g. coding"},{"line_number":42,"context_line":"  conventions, review standards, communication style)."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"**Knowledge**"},{"line_number":45,"context_line":"  Project reference files (architecture, versioning rules, subsystem maps) that"},{"line_number":46,"context_line":"  skills load at invocation time. Knowledge files can live in this repository"},{"line_number":47,"context_line":"  under ``knowledge/``, or directly in the OpenStack service repositories"},{"line_number":48,"context_line":"  themselves if the project communities prefer to maintain them in-tree."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Repository Structure"},{"line_number":51,"context_line":"--------------------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":".. code-block:: text"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"   .agents/"},{"line_number":56,"context_line":"   └── skills/                    # All skills (agentskills format)"},{"line_number":57,"context_line":"       ├── code-review/"},{"line_number":58,"context_line":"       │   └── SKILL.md"},{"line_number":59,"context_line":"       ├── spec-review/"},{"line_number":60,"context_line":"       │   └── SKILL.md"},{"line_number":61,"context_line":"       ├── triage/"},{"line_number":62,"context_line":"       │   └── SKILL.md"},{"line_number":63,"context_line":"       └── ..."},{"line_number":64,"context_line":"   personas/                      # Reusable agent personas"},{"line_number":65,"context_line":"   rules/                         # Behavioral rules"},{"line_number":66,"context_line":"   knowledge/                     # Project reference files (optional)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"AI clients discover all skills at once from the top-level ``.agents/skills/``"},{"line_number":69,"context_line":"path defined by the Agent Skills specification."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Knowledge files may alternatively live in the target project\u0027s own repository"},{"line_number":72,"context_line":"(e.g. ``nova/.agents/knowledge/nova.md``). Skills resolve knowledge dynamically"},{"line_number":73,"context_line":"and will look in both locations."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Getting Started"},{"line_number":76,"context_line":"---------------"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"d6d8e3f2_14454d27","line":74,"range":{"start_line":23,"start_character":1,"end_line":74,"end_character":1},"updated":"2026-04-17 09:43:46.000000000","message":"(Continuing the discussion from https://review.opendev.org/c/openstack/agentic-workflows/+/985027/comment/dc8ea16c_f0e70142/)\n\nI think we should drop this information from here. I understand your point regarding this information being used for humans, however, you used an agent yourself to help write all commits in this series and I suspect that will be pretty typical. We do not need to provide this level of detail here because an agent authoring content here will already be reading `AGENTS.md` and will know this information. Placing this kind of detail here would be no different to placing information about the directory structure of Nova in its `README.rst`. We clearly wouldn\u0027t do that.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9589cfe20734fdf2ab4400a8de88a77efa7d8949","unresolved":false,"context_lines":[{"line_number":20,"context_line":"project, they dynamically resolve project context at invocation time. When you"},{"line_number":21,"context_line":"invoke a skill, it asks which project you are working on (or infers it from"},{"line_number":22,"context_line":"context), then loads the appropriate knowledge and personas."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Concepts"},{"line_number":25,"context_line":"--------"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"**Skill**"},{"line_number":28,"context_line":"  The primary unit of functionality, following the `Agent Skills specification"},{"line_number":29,"context_line":"  \u003chttps://agentskills.io/specification\u003e`_. A skill is a directory containing a"},{"line_number":30,"context_line":"  ``SKILL.md`` file (YAML frontmatter + markdown instructions), plus optional"},{"line_number":31,"context_line":"  ``scripts/``, ``references/``, and ``assets/`` subdirectories."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"**Persona**"},{"line_number":34,"context_line":"  A reusable agent role definition that encodes domain expertise (e.g. a core"},{"line_number":35,"context_line":"  reviewer persona, a security reviewer persona). Skills can invoke personas"},{"line_number":36,"context_line":"  automatically as subagents when specialized knowledge is needed. Users can"},{"line_number":37,"context_line":"  also invoke personas directly in conversation -- see"},{"line_number":38,"context_line":"  `Using Personas with AI Clients`_ for examples."},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"**Rule**"},{"line_number":41,"context_line":"  Behavioral guidelines that shape how the agent operates (e.g. coding"},{"line_number":42,"context_line":"  conventions, review standards, communication style)."},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"**Knowledge**"},{"line_number":45,"context_line":"  Project reference files (architecture, versioning rules, subsystem maps) that"},{"line_number":46,"context_line":"  skills load at invocation time. Knowledge files can live in this repository"},{"line_number":47,"context_line":"  under ``knowledge/``, or directly in the OpenStack service repositories"},{"line_number":48,"context_line":"  themselves if the project communities prefer to maintain them in-tree."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Repository Structure"},{"line_number":51,"context_line":"--------------------"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":".. code-block:: text"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"   .agents/"},{"line_number":56,"context_line":"   └── skills/                    # All skills (agentskills format)"},{"line_number":57,"context_line":"       ├── code-review/"},{"line_number":58,"context_line":"       │   └── SKILL.md"},{"line_number":59,"context_line":"       ├── spec-review/"},{"line_number":60,"context_line":"       │   └── SKILL.md"},{"line_number":61,"context_line":"       ├── triage/"},{"line_number":62,"context_line":"       │   └── SKILL.md"},{"line_number":63,"context_line":"       └── ..."},{"line_number":64,"context_line":"   personas/                      # Reusable agent personas"},{"line_number":65,"context_line":"   rules/                         # Behavioral rules"},{"line_number":66,"context_line":"   knowledge/                     # Project reference files (optional)"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"AI clients discover all skills at once from the top-level ``.agents/skills/``"},{"line_number":69,"context_line":"path defined by the Agent Skills specification."},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"Knowledge files may alternatively live in the target project\u0027s own repository"},{"line_number":72,"context_line":"(e.g. ``nova/.agents/knowledge/nova.md``). Skills resolve knowledge dynamically"},{"line_number":73,"context_line":"and will look in both locations."},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"Getting Started"},{"line_number":76,"context_line":"---------------"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"a1df5b1f_64531e01","line":74,"range":{"start_line":23,"start_character":1,"end_line":74,"end_character":1},"in_reply_to":"d6d8e3f2_14454d27","updated":"2026-04-17 09:55:59.000000000","message":"Done","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6db1e4195c2484ea6293711f75f960bfae53095a","unresolved":true,"context_lines":[{"line_number":80,"context_line":".. code-block:: bash"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"   git clone https://opendev.org/openstack/agentic-workflows.git"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The skills are designed to work with OpenStack project source code (Nova,"},{"line_number":85,"context_line":"Neutron, etc.) without bundling that code here. Clone both repositories side by"},{"line_number":86,"context_line":"side:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":".. code-block:: bash"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"cebafa9a_7fb12f1b","line":86,"range":{"start_line":83,"start_character":1,"end_line":86,"end_character":5},"updated":"2026-04-17 09:43:46.000000000","message":"```suggestion\n\nThe skills are designed to work with OpenStack project source code (Nova,\nNeutron, etc.) without bundling that code here. Clone all repositories\nside-by-side:\n```","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9589cfe20734fdf2ab4400a8de88a77efa7d8949","unresolved":false,"context_lines":[{"line_number":80,"context_line":".. code-block:: bash"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"   git clone https://opendev.org/openstack/agentic-workflows.git"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"The skills are designed to work with OpenStack project source code (Nova,"},{"line_number":85,"context_line":"Neutron, etc.) without bundling that code here. Clone both repositories side by"},{"line_number":86,"context_line":"side:"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":".. code-block:: bash"},{"line_number":89,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"55a59ee9_c4285ad6","line":86,"range":{"start_line":83,"start_character":1,"end_line":86,"end_character":5},"in_reply_to":"cebafa9a_7fb12f1b","updated":"2026-04-17 09:55:59.000000000","message":"Done","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cddb6905a91dd960a724ff6a6f4da5bfe663197a","unresolved":true,"context_lines":[{"line_number":88,"context_line":".. code-block:: bash"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"   git clone https://opendev.org/openstack/agentic-workflows.git"},{"line_number":91,"context_line":"   git clone https://opendev.org/openstack/nova.git"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Then open the ``agentic-workflows`` directory in your AI tool of choice. All"},{"line_number":94,"context_line":"skills are available immediately."}],"source_content_type":"text/x-rst","patch_set":1,"id":"3979f622_fd0a6c4a","line":91,"updated":"2026-04-17 11:04:04.000000000","message":"a slightly unrelated topic but on the topic of repos\n\ni dont want to be too perspciftinve in the location but one of the thing we may want to encode is the idea that when you need context on say oslo libs or other repos you shoudl not try and hit the web but instead check for a parrelel repo clone becide the current repo\n\nthere tend to be 2 common ways peopel mange repos in most cases\n\na \"repos\" directory with alll there repos cloned as a flat toplogy\nor a repos directory where repos are namespaced via the host\n\ni.e. ~/repos/opendev.org/openstack/nova\n\ni think we coudl have for example a repo finder/manager skill that can read an environemt varble for 1 the localiton to place the repo root \n`~/repos` in my case  but it could default to the parent of agentic-workflows repo or a gitignored subdirecty of it and the perfered managment style `flat` or `namespaced`\n\ni have found that having libary skills + subagent that know how to use a specific tool or do oen thing and an worklfow skill that know how to acive a task is a powerful model\n\ni.e a context provider skill can be composes of a repo cloner skill that know how to check if a repo is already local (and clone it if not) and a exlopre subagent to retirve the relvent context form that local clone\n\navoiding load on upstream servers.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6db1e4195c2484ea6293711f75f960bfae53095a","unresolved":true,"context_lines":[{"line_number":88,"context_line":".. code-block:: bash"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"   git clone https://opendev.org/openstack/agentic-workflows.git"},{"line_number":91,"context_line":"   git clone https://opendev.org/openstack/nova.git"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Then open the ``agentic-workflows`` directory in your AI tool of choice. All"},{"line_number":94,"context_line":"skills are available immediately."}],"source_content_type":"text/x-rst","patch_set":1,"id":"7e8c2622_1cdfc7b7","line":91,"updated":"2026-04-17 09:43:46.000000000","message":"nit: instead of showing the clone commands twice, could you instead give a partial `tree` example here showing all the repos side-by-side?\n\n```\n❯ tree -L 1\n.\n├── agentic-workflows\n├── cinder\n├── keystone\n├── glance\n├── neutron\n├── nova\n└── swift\n```","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6ecf4e8c725b0298b93680dc1639146847058b47","unresolved":true,"context_lines":[{"line_number":88,"context_line":".. code-block:: bash"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"   git clone https://opendev.org/openstack/agentic-workflows.git"},{"line_number":91,"context_line":"   git clone https://opendev.org/openstack/nova.git"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Then open the ``agentic-workflows`` directory in your AI tool of choice. All"},{"line_number":94,"context_line":"skills are available immediately."}],"source_content_type":"text/x-rst","patch_set":1,"id":"f276045c_0872ab0f","line":91,"in_reply_to":"3979f622_fd0a6c4a","updated":"2026-04-17 11:20:33.000000000","message":"stephen clarified the structure in his follow-up patch. The only requirement is to have that repo to be at the same level than the service projects ones.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9589cfe20734fdf2ab4400a8de88a77efa7d8949","unresolved":false,"context_lines":[{"line_number":88,"context_line":".. code-block:: bash"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"   git clone https://opendev.org/openstack/agentic-workflows.git"},{"line_number":91,"context_line":"   git clone https://opendev.org/openstack/nova.git"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Then open the ``agentic-workflows`` directory in your AI tool of choice. All"},{"line_number":94,"context_line":"skills are available immediately."}],"source_content_type":"text/x-rst","patch_set":1,"id":"d8c4636c_36503d3c","line":91,"in_reply_to":"7e8c2622_1cdfc7b7","updated":"2026-04-17 09:55:59.000000000","message":"Done","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cddb6905a91dd960a724ff6a6f4da5bfe663197a","unresolved":true,"context_lines":[{"line_number":91,"context_line":"   git clone https://opendev.org/openstack/nova.git"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Then open the ``agentic-workflows`` directory in your AI tool of choice. All"},{"line_number":94,"context_line":"skills are available immediately."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Using Personas with AI Clients"},{"line_number":97,"context_line":"------------------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"13da8e21_5ef5e314","line":94,"updated":"2026-04-17 11:04:04.000000000","message":"sure but you shoudl be able to use it in the nova directory too.\nthat is how i woudl expect this to work in most case.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6ecf4e8c725b0298b93680dc1639146847058b47","unresolved":true,"context_lines":[{"line_number":91,"context_line":"   git clone https://opendev.org/openstack/nova.git"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Then open the ``agentic-workflows`` directory in your AI tool of choice. All"},{"line_number":94,"context_line":"skills are available immediately."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Using Personas with AI Clients"},{"line_number":97,"context_line":"------------------------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7b496d32_2f0ecb1b","line":94,"in_reply_to":"13da8e21_5ef5e314","updated":"2026-04-17 11:20:33.000000000","message":"This is a deployment concern but I hear your point.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6db1e4195c2484ea6293711f75f960bfae53095a","unresolved":true,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Skills in ``.agents/skills/`` follow the Agent Skills specification and are"},{"line_number":100,"context_line":"discovered automatically by any compatible AI client. Persona discovery,"},{"line_number":101,"context_line":"however, varies between clients. Below are examples for two popular tools."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Cursor"},{"line_number":104,"context_line":"~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"3c297590_1e09b924","line":101,"updated":"2026-04-17 09:43:46.000000000","message":"```suggestion\nhowever, varies between clients. Some examples.\n```","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9589cfe20734fdf2ab4400a8de88a77efa7d8949","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"Skills in ``.agents/skills/`` follow the Agent Skills specification and are"},{"line_number":100,"context_line":"discovered automatically by any compatible AI client. Persona discovery,"},{"line_number":101,"context_line":"however, varies between clients. Below are examples for two popular tools."},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"Cursor"},{"line_number":104,"context_line":"~~~~~~"}],"source_content_type":"text/x-rst","patch_set":1,"id":"368d6bd2_46353020","line":101,"in_reply_to":"3c297590_1e09b924","updated":"2026-04-17 09:55:59.000000000","message":"Done","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"cddb6905a91dd960a724ff6a6f4da5bfe663197a","unresolved":true,"context_lines":[{"line_number":122,"context_line":"To load project-level context automatically, create a ``CLAUDE.md`` file at"},{"line_number":123,"context_line":"the repository root. To invoke personas directly in conversation, use the"},{"line_number":124,"context_line":"``@personas/name.md`` syntax."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Design Principles"},{"line_number":127,"context_line":"-----------------"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"bcde42ac_c17bdee2","line":125,"updated":"2026-04-17 11:04:04.000000000","message":"so for Claude/droid ill propose addint the supprot for there native market place format overrieding there defautl locaion to use the .agents/skills locaiotn.","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6ecf4e8c725b0298b93680dc1639146847058b47","unresolved":true,"context_lines":[{"line_number":122,"context_line":"To load project-level context automatically, create a ``CLAUDE.md`` file at"},{"line_number":123,"context_line":"the repository root. To invoke personas directly in conversation, use the"},{"line_number":124,"context_line":"``@personas/name.md`` syntax."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Design Principles"},{"line_number":127,"context_line":"-----------------"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"fb2b6a8e_0a18bf41","line":125,"in_reply_to":"bcde42ac_c17bdee2","updated":"2026-04-17 11:20:33.000000000","message":"cool","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6db1e4195c2484ea6293711f75f960bfae53095a","unresolved":true,"context_lines":[{"line_number":122,"context_line":"To load project-level context automatically, create a ``CLAUDE.md`` file at"},{"line_number":123,"context_line":"the repository root. To invoke personas directly in conversation, use the"},{"line_number":124,"context_line":"``@personas/name.md`` syntax."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Design Principles"},{"line_number":127,"context_line":"-----------------"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"* **Do not duplicate deterministic checks.** If a linter or CI job already"},{"line_number":130,"context_line":"  enforces a rule, the skill should not re-check it."},{"line_number":131,"context_line":"* **Use in-tree docs as the source of truth.** Reference each project\u0027s"},{"line_number":132,"context_line":"  contributor documentation rather than forking rules into this repository."},{"line_number":133,"context_line":"* **Open format, zero duplication.** Skills, personas, and rules are authored"},{"line_number":134,"context_line":"  once in the agentskills format and discovered by any compatible AI client."},{"line_number":135,"context_line":"* **Project-agnostic skills.** Skills dynamically resolve project context at"},{"line_number":136,"context_line":"  invocation time. Adding support for a new project requires only new knowledge"},{"line_number":137,"context_line":"  and persona files -- no skill changes."},{"line_number":138,"context_line":"* **Human decides, agent assists.** Skills provide analysis and draft comments,"},{"line_number":139,"context_line":"  but the human makes final decisions (e.g. Gerrit votes)."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Contributing"},{"line_number":142,"context_line":"------------"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"f3d31110_354d24d1","line":140,"range":{"start_line":125,"start_character":1,"end_line":140,"end_character":1},"updated":"2026-04-17 09:43:46.000000000","message":"We should drop this also","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9589cfe20734fdf2ab4400a8de88a77efa7d8949","unresolved":false,"context_lines":[{"line_number":122,"context_line":"To load project-level context automatically, create a ``CLAUDE.md`` file at"},{"line_number":123,"context_line":"the repository root. To invoke personas directly in conversation, use the"},{"line_number":124,"context_line":"``@personas/name.md`` syntax."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"Design Principles"},{"line_number":127,"context_line":"-----------------"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"* **Do not duplicate deterministic checks.** If a linter or CI job already"},{"line_number":130,"context_line":"  enforces a rule, the skill should not re-check it."},{"line_number":131,"context_line":"* **Use in-tree docs as the source of truth.** Reference each project\u0027s"},{"line_number":132,"context_line":"  contributor documentation rather than forking rules into this repository."},{"line_number":133,"context_line":"* **Open format, zero duplication.** Skills, personas, and rules are authored"},{"line_number":134,"context_line":"  once in the agentskills format and discovered by any compatible AI client."},{"line_number":135,"context_line":"* **Project-agnostic skills.** Skills dynamically resolve project context at"},{"line_number":136,"context_line":"  invocation time. Adding support for a new project requires only new knowledge"},{"line_number":137,"context_line":"  and persona files -- no skill changes."},{"line_number":138,"context_line":"* **Human decides, agent assists.** Skills provide analysis and draft comments,"},{"line_number":139,"context_line":"  but the human makes final decisions (e.g. Gerrit votes)."},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"Contributing"},{"line_number":142,"context_line":"------------"},{"line_number":143,"context_line":""}],"source_content_type":"text/x-rst","patch_set":1,"id":"2b39b060_1240d79d","line":140,"range":{"start_line":125,"start_character":1,"end_line":140,"end_character":1},"in_reply_to":"f3d31110_354d24d1","updated":"2026-04-17 09:55:59.000000000","message":"Done","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6db1e4195c2484ea6293711f75f960bfae53095a","unresolved":true,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"If you would like to contribute to this project, please see"},{"line_number":145,"context_line":"``CONTRIBUTING.rst`` and the"},{"line_number":146,"context_line":"`OpenStack Contributor Guide \u003chttps://docs.openstack.org/contributors/\u003e`_."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Bugs"},{"line_number":149,"context_line":"----"}],"source_content_type":"text/x-rst","patch_set":1,"id":"096ed007_830720fc","line":146,"updated":"2026-04-17 09:43:46.000000000","message":"```suggestion\n`OpenStack Contributor Guide \u003chttps://docs.openstack.org/contributors/\u003e`_.\nIt is expected that most contributions to this repo will be agent-based. The\n`AGENTS.md` file provides guidance on the structure and design principles of\nthis project.\n```","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9589cfe20734fdf2ab4400a8de88a77efa7d8949","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"If you would like to contribute to this project, please see"},{"line_number":145,"context_line":"``CONTRIBUTING.rst`` and the"},{"line_number":146,"context_line":"`OpenStack Contributor Guide \u003chttps://docs.openstack.org/contributors/\u003e`_."},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Bugs"},{"line_number":149,"context_line":"----"}],"source_content_type":"text/x-rst","patch_set":1,"id":"470ed242_9a59f368","line":146,"in_reply_to":"096ed007_830720fc","updated":"2026-04-17 09:55:59.000000000","message":"Done","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6db1e4195c2484ea6293711f75f960bfae53095a","unresolved":true,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Bugs"},{"line_number":149,"context_line":"----"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"A Launchpad bug tracker will be set up shortly. In the meantime, please report"},{"line_number":152,"context_line":"issues through Gerrit or the openstack-discuss mailing list."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"License"},{"line_number":155,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"af00afa2_e5382d1b","line":152,"range":{"start_line":150,"start_character":1,"end_line":152,"end_character":60},"updated":"2026-04-17 09:43:46.000000000","message":"```suggestion\n\nPlease report issues through Gerrit or the openstack-discuss mailing list.\n```","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9589cfe20734fdf2ab4400a8de88a77efa7d8949","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"Bugs"},{"line_number":149,"context_line":"----"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"A Launchpad bug tracker will be set up shortly. In the meantime, please report"},{"line_number":152,"context_line":"issues through Gerrit or the openstack-discuss mailing list."},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"License"},{"line_number":155,"context_line":"-------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"71746bdc_34653116","line":152,"range":{"start_line":150,"start_character":1,"end_line":152,"end_character":60},"in_reply_to":"af00afa2_e5382d1b","updated":"2026-04-17 09:55:59.000000000","message":"Done","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"6db1e4195c2484ea6293711f75f960bfae53095a","unresolved":true,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"License"},{"line_number":155,"context_line":"-------"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"This project is licensed under the Apache License, Version 2.0. See the"},{"line_number":158,"context_line":"``LICENSE`` file for details."}],"source_content_type":"text/x-rst","patch_set":1,"id":"b19f0403_96a1c9ce","line":158,"range":{"start_line":156,"start_character":1,"end_line":158,"end_character":29},"updated":"2026-04-17 09:43:46.000000000","message":"IANAL. Does a license make sense if all content here is agent-authored?","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9589cfe20734fdf2ab4400a8de88a77efa7d8949","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"License"},{"line_number":155,"context_line":"-------"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"This project is licensed under the Apache License, Version 2.0. See the"},{"line_number":158,"context_line":"``LICENSE`` file for details."}],"source_content_type":"text/x-rst","patch_set":1,"id":"881ae233_9704ca0a","line":158,"range":{"start_line":156,"start_character":1,"end_line":158,"end_character":29},"in_reply_to":"b19f0403_96a1c9ce","updated":"2026-04-17 09:55:59.000000000","message":"Done","commit_id":"dd4ca1c4d5104ae63bd42cbe2f201f8bbbfd71a7"}]}
