)]}'
{".agents/skills/backport/SKILL.md":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acbbcf14f0bc7385e3452aa04dc02aa0b4a2f687","unresolved":true,"context_lines":[{"line_number":2,"context_line":"name: backport"},{"line_number":3,"context_line":"description: \u003e"},{"line_number":4,"context_line":"  Cherry-pick a merged OpenStack change to an upstream stable branch. Use when"},{"line_number":5,"context_line":"  backporting a bug fix from master to a stable branch like stable/2025.1,"},{"line_number":6,"context_line":"  preparing a Gerrit backport, or cherry-picking upstream OpenStack patches to"},{"line_number":7,"context_line":"  stable releases."},{"line_number":8,"context_line":"---"}],"source_content_type":"text/x-markdown","patch_set":1,"id":"2c203987_3c5ce935","line":5,"range":{"start_line":5,"start_character":23,"end_line":5,"end_character":74},"updated":"2026-06-01 08:29:15.000000000","message":"Use when backporting changes from newer branches to older stable branches. Like from master to stable or from a stable to an older stable branch.","commit_id":"c1f85f12285f6e7cf61b59a2c540c9d62fb4b649"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acbbcf14f0bc7385e3452aa04dc02aa0b4a2f687","unresolved":true,"context_lines":[{"line_number":3,"context_line":"description: \u003e"},{"line_number":4,"context_line":"  Cherry-pick a merged OpenStack change to an upstream stable branch. Use when"},{"line_number":5,"context_line":"  backporting a bug fix from master to a stable branch like stable/2025.1,"},{"line_number":6,"context_line":"  preparing a Gerrit backport, or cherry-picking upstream OpenStack patches to"},{"line_number":7,"context_line":"  stable releases."},{"line_number":8,"context_line":"---"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"# Backport a Change to a Stable Branch"}],"source_content_type":"text/x-markdown","patch_set":1,"id":"8e61a46c_71793e56","line":7,"range":{"start_line":6,"start_character":31,"end_line":7,"end_character":18},"updated":"2026-06-01 08:29:15.000000000","message":"I think this is a duplicate sentence. It does say anything new.","commit_id":"c1f85f12285f6e7cf61b59a2c540c9d62fb4b649"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acbbcf14f0bc7385e3452aa04dc02aa0b4a2f687","unresolved":true,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"## Persona Discovery"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"1. If `personas/backport-specialist.md` exists, invoke it for dependency"},{"line_number":21,"context_line":"   analysis, conflict resolution guidance, and stable branch conventions"},{"line_number":22,"context_line":"2. If the user specified a project, check for `knowledge/{project}.md` and"},{"line_number":23,"context_line":"   `personas/{project}-core.md` — load them for project-specific context"}],"source_content_type":"text/x-markdown","patch_set":1,"id":"98351996_c39e2bf9","line":20,"range":{"start_line":20,"start_character":25,"end_line":20,"end_character":35},"updated":"2026-06-01 08:29:15.000000000","message":"Where this is expected to exists in the target repo, like in openstack/nova? Or it expected to exists in openstack/agentic-workflows? or both?","commit_id":"c1f85f12285f6e7cf61b59a2c540c9d62fb4b649"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acbbcf14f0bc7385e3452aa04dc02aa0b4a2f687","unresolved":true,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"1. If `personas/backport-specialist.md` exists, invoke it for dependency"},{"line_number":21,"context_line":"   analysis, conflict resolution guidance, and stable branch conventions"},{"line_number":22,"context_line":"2. If the user specified a project, check for `knowledge/{project}.md` and"},{"line_number":23,"context_line":"   `personas/{project}-core.md` — load them for project-specific context"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"## Input"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"5c4d77a0_c60ad7fa","line":23,"range":{"start_line":22,"start_character":0,"end_line":23,"end_character":72},"updated":"2026-06-01 08:29:15.000000000","message":"is this some generic structure we want to follow to store knowledge? If so can we document it and maybe add some simple script to enforce structure / naming of these files? E.g. if the project in gerrit is openstack/nova does the file in knowledge is openstack-nova.md or just nova.md or anything else?","commit_id":"c1f85f12285f6e7cf61b59a2c540c9d62fb4b649"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acbbcf14f0bc7385e3452aa04dc02aa0b4a2f687","unresolved":true,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"If the user already specified a stable branch, use it. Otherwise, ask:"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"\"Which stable branch should this change be backported to? (e.g.,"},{"line_number":85,"context_line":"`stable/2025.1`, `stable/2024.2`)\""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"OpenStack stable branch naming conventions:"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"- Modern releases: `stable/2025.1`, `stable/2024.2`, `stable/2024.1`"},{"line_number":90,"context_line":"- Legacy releases: `stable/zed`, `stable/yoga`, `stable/xena`"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"### Step 5. Verify Local Checkout"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"4325dd35_6f61923f","line":90,"range":{"start_line":84,"start_character":0,"end_line":90,"end_character":61},"updated":"2026-06-01 08:29:15.000000000","message":"The branch names will go out of sync with reality quickly as we EOM and EOL them cycle by cycle. I assume we will be lazy to update this doc every cycle. So we should make the examples somehow stable (sic). Maybe introduce the fact that stable branches are numbered by the year and in-year release count and that we keep 3 stable branches alive.","commit_id":"c1f85f12285f6e7cf61b59a2c540c9d62fb4b649"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acbbcf14f0bc7385e3452aa04dc02aa0b4a2f687","unresolved":true,"context_lines":[{"line_number":117,"context_line":"   master recently):"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"   ```bash"},{"line_number":120,"context_line":"   git cat-file -t {commit_hash}"},{"line_number":121,"context_line":"   ```"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"   If this succeeds, the commit is already local — skip to step 7."}],"source_content_type":"text/x-markdown","patch_set":1,"id":"5e05c7bc_c948e009","line":120,"updated":"2026-06-01 08:29:15.000000000","message":"can we just try git cherry-pick -x and if it fails due to the missing commit then try to fetch the hash?","commit_id":"c1f85f12285f6e7cf61b59a2c540c9d62fb4b649"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acbbcf14f0bc7385e3452aa04dc02aa0b4a2f687","unresolved":true,"context_lines":[{"line_number":150,"context_line":"   This fetches the change and creates a local branch for it. Note the commit"},{"line_number":151,"context_line":"   hash, then switch back to proceed with the cherry-pick."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"If none of the above work, fall back to"},{"line_number":154,"context_line":"[the refspec fetch script](scripts/gerrit-git-fetch.sh):"},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"```bash"}],"source_content_type":"text/x-markdown","patch_set":1,"id":"0aefe01e_d07f70f6","line":153,"updated":"2026-06-01 08:29:15.000000000","message":"if we have a script that we know works then why don\u0027t we use that as the first tool if the hash does not exists. Or even more, write a script that does cherry-pick -x and if it fails due to missing hash then fetches the hash and does cherry-pick again. (rule: Use deterministic tools when the task is easy to automate)","commit_id":"c1f85f12285f6e7cf61b59a2c540c9d62fb4b649"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acbbcf14f0bc7385e3452aa04dc02aa0b4a2f687","unresolved":true,"context_lines":[{"line_number":209,"context_line":"   ```bash"},{"line_number":210,"context_line":"   git cherry-pick --abort"},{"line_number":211,"context_line":"   ```"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"### Step 9. Present Result"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"Show the backport result:"}],"source_content_type":"text/x-markdown","patch_set":1,"id":"4c68a974_8c728fa8","line":212,"updated":"2026-06-01 08:29:15.000000000","message":"We are missing a step where we ensure that the conflict resolution is noted in the commit message explaining *why* the commit needed to be changed during the backport.","commit_id":"c1f85f12285f6e7cf61b59a2c540c9d62fb4b649"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acbbcf14f0bc7385e3452aa04dc02aa0b4a2f687","unresolved":true,"context_lines":[{"line_number":239,"context_line":"Or if `git-review` is not configured:"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":"```bash"},{"line_number":242,"context_line":"git push origin HEAD:refs/for/{stable_branch}"},{"line_number":243,"context_line":"```"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"### Step 10. Await User Review"}],"source_content_type":"text/x-markdown","patch_set":1,"id":"8ffb6a97_8bf1b4e5","line":242,"updated":"2026-06-01 08:29:15.000000000","message":"this always works compared to git-review (as that required setup), so I suggest to not have these extra options to simplify the process. Use the git too that always works.","commit_id":"c1f85f12285f6e7cf61b59a2c540c9d62fb4b649"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"acbbcf14f0bc7385e3452aa04dc02aa0b4a2f687","unresolved":true,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"```bash"},{"line_number":242,"context_line":"git push origin HEAD:refs/for/{stable_branch}"},{"line_number":243,"context_line":"```"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"### Step 10. Await User Review"},{"line_number":246,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":1,"id":"8ef6b07b_54921a0b","line":243,"updated":"2026-06-01 08:29:15.000000000","message":"Use the same topic when creating the backport that was used for the original commit.","commit_id":"c1f85f12285f6e7cf61b59a2c540c9d62fb4b649"}]}
