)]}'
{".agents/skills/add-cli-command/SKILL.md":[{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"7c2e2ea8ce5d1d1705a24080afbbeb6564293cba","unresolved":true,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Choose the right mixin combination:"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"| If the command runs... | Inherit from |"},{"line_number":20,"context_line":"|---|---|"},{"line_number":21,"context_line":"| Only Kayobe playbooks | `KayobeAnsibleMixin, VaultMixin, Command` |"},{"line_number":22,"context_line":"| Kayobe + Kolla Ansible | `KollaAnsibleMixin, KayobeAnsibleMixin, VaultMixin, Command` |"}],"source_content_type":"text/x-markdown","patch_set":4,"id":"10cec8db_968d3329","line":19,"updated":"2026-05-11 16:11:15.000000000","message":"Kolla-backed command recipe missing required handle_kolla_tags_limits_deprecation(parsed_args) call. \nExisting commands using KollaAnsibleMixin invoke this before execution. \nWithout it new commands skip standard warnings and mutual-exclusion checks for --kolla-limit, --kolla-tags, --kolla-skip-tags.","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"46a86a93851faf29dad3bbdf66d68f04e8383925","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Choose the right mixin combination:"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"| If the command runs... | Inherit from |"},{"line_number":20,"context_line":"|---|---|"},{"line_number":21,"context_line":"| Only Kayobe playbooks | `KayobeAnsibleMixin, VaultMixin, Command` |"},{"line_number":22,"context_line":"| Kayobe + Kolla Ansible | `KollaAnsibleMixin, KayobeAnsibleMixin, VaultMixin, Command` |"}],"source_content_type":"text/x-markdown","patch_set":4,"id":"f3cee530_dadf6617","line":19,"in_reply_to":"10cec8db_968d3329","updated":"2026-05-11 17:40:45.000000000","message":"Done","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"}],".agents/skills/add-config-variable/SKILL.md":[{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"7c2e2ea8ce5d1d1705a24080afbbeb6564293cba","unresolved":true,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"This lets operators extend defaults via `_extra` without replacing the whole list."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"### 2. Add the commented example in `etc/kayobe/`"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Add a commented-out version in `etc/kayobe/\u003ccomponent\u003e.yml`:"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":4,"id":"f35dd8f3_782c03e9","line":49,"updated":"2026-05-11 16:11:15.000000000","message":"This reads as “every new variable gets etc/kayobe/ example”, but repo has computed/internal defaults like kolla_base_distro_version that should stay inventory-only. \nSkill should scope this step to operator-overridable settings, else agents will promote internal derived vars into sample config.","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"46a86a93851faf29dad3bbdf66d68f04e8383925","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"This lets operators extend defaults via `_extra` without replacing the whole list."},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"### 2. Add the commented example in `etc/kayobe/`"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"Add a commented-out version in `etc/kayobe/\u003ccomponent\u003e.yml`:"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":4,"id":"cc1194e4_d4b1906f","line":49,"in_reply_to":"f35dd8f3_782c03e9","updated":"2026-05-11 17:40:45.000000000","message":"Done","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"},{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"7c2e2ea8ce5d1d1705a24080afbbeb6564293cba","unresolved":true,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"### 3. Update documentation"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Add or update the variable description in the relevant file under `doc/source/`."},{"line_number":79,"context_line":"Typically this is `doc/source/configuration/reference/\u003ccomponent\u003e.rst`."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"### 4. Add a release note"}],"source_content_type":"text/x-markdown","patch_set":4,"id":"95f745b0_76bf0378","line":78,"updated":"2026-05-11 16:11:15.000000000","message":"Docs mapping too rigid. Repo does not consistently use configuration/reference/\u003ccomponent\u003e.rst: openstack docs live in kayobe.rst, host-group settings in hosts.rst, ipa in ironic-python-agent.rst.\n\nSkill should say “update authoritative existing doc page”, not assume filename. \nOr we need to follow conventions more closely 😉","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"46a86a93851faf29dad3bbdf66d68f04e8383925","unresolved":false,"context_lines":[{"line_number":75,"context_line":""},{"line_number":76,"context_line":"### 3. Update documentation"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"Add or update the variable description in the relevant file under `doc/source/`."},{"line_number":79,"context_line":"Typically this is `doc/source/configuration/reference/\u003ccomponent\u003e.rst`."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"### 4. Add a release note"}],"source_content_type":"text/x-markdown","patch_set":4,"id":"ccd83a2a_bdd02b42","line":78,"in_reply_to":"95f745b0_76bf0378","updated":"2026-05-11 17:40:45.000000000","message":"Done","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"},{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"7c2e2ea8ce5d1d1705a24080afbbeb6564293cba","unresolved":true,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"## File Alignment Reference"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"| Inventory defaults | Operator examples | Docs |"},{"line_number":99,"context_line":"|---|---|---|"},{"line_number":100,"context_line":"| `ansible/inventory/group_vars/all/\u003ccomponent\u003e` | `etc/kayobe/\u003ccomponent\u003e.yml` | `doc/source/configuration/reference/\u003ccomponent\u003e.rst` |"},{"line_number":101,"context_line":"| `ansible/inventory/group_vars/\u003cgroup\u003e/\u003ccomponent\u003e` | `etc/kayobe/\u003ccomponent\u003e.yml` | Same docs file |"}],"source_content_type":"text/x-markdown","patch_set":4,"id":"48eb09e7_7c3cbd38","line":98,"updated":"2026-05-11 16:11:15.000000000","message":"Host-group mapping wrong. group_vars/\u003cgroup\u003e/\u003ccomponent\u003e often maps to host-group example file like etc/kayobe/compute.yml or etc/kayobe/controllers.yml, not etc/kayobe/\u003ccomponent\u003e.yml. \nThis table will send agent to wrong operator config file. \nFor example, compute/network and controllers/firewall map to etc/kayobe/compute.yml and etc/kayobe/controllers.yml, not etc/kayobe/\u003ccomponent\u003e.yml.","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"},{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"6cc0a6fd8cabe853c06f824179af65fc08fa05f6","unresolved":true,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"## File Alignment Reference"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"| Inventory defaults | Operator examples | Docs |"},{"line_number":99,"context_line":"|---|---|---|"},{"line_number":100,"context_line":"| `ansible/inventory/group_vars/all/\u003ccomponent\u003e` | `etc/kayobe/\u003ccomponent\u003e.yml` | `doc/source/configuration/reference/\u003ccomponent\u003e.rst` |"},{"line_number":101,"context_line":"| `ansible/inventory/group_vars/\u003cgroup\u003e/\u003ccomponent\u003e` | `etc/kayobe/\u003ccomponent\u003e.yml` | Same docs file |"}],"source_content_type":"text/x-markdown","patch_set":4,"id":"7f2fac4f_0e9a24ea","line":98,"in_reply_to":"077efa68_aaf8391c","updated":"2026-05-14 10:04:23.000000000","message":"Reopening - kolla_base_distro_version is the wrong example. It\u0027s exposed at etc/kayobe/kolla.yml:83 and documented in both kolla.rst:81 and kolla-ansible.rst:118, so the rule and its example contradict each other.\n\nWe can drop the Jinja criterion entirely and keep the operator-overridable framing from the original comment completely. \nFollowing this as-written could make agents remove kolla_base_distro_version from etc/kayobe/kolla.yml 😉","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"46a86a93851faf29dad3bbdf66d68f04e8383925","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"## File Alignment Reference"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"| Inventory defaults | Operator examples | Docs |"},{"line_number":99,"context_line":"|---|---|---|"},{"line_number":100,"context_line":"| `ansible/inventory/group_vars/all/\u003ccomponent\u003e` | `etc/kayobe/\u003ccomponent\u003e.yml` | `doc/source/configuration/reference/\u003ccomponent\u003e.rst` |"},{"line_number":101,"context_line":"| `ansible/inventory/group_vars/\u003cgroup\u003e/\u003ccomponent\u003e` | `etc/kayobe/\u003ccomponent\u003e.yml` | Same docs file |"}],"source_content_type":"text/x-markdown","patch_set":4,"id":"077efa68_aaf8391c","line":98,"in_reply_to":"48eb09e7_7c3cbd38","updated":"2026-05-11 17:40:45.000000000","message":"Done","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"},{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"03f04dfa1528957d90f61afe33d180c532b1332e","unresolved":true,"context_lines":[{"line_number":76,"context_line":"Rules:"},{"line_number":77,"context_line":"- Keep the same comment text as the inventory default (adjusted for operator audience)."},{"line_number":78,"context_line":"- Preserve the `###` section dividers and comment style used in the rest of the file."},{"line_number":79,"context_line":"- The file name in `etc/kayobe/` must match the component name with a `.yml` extension."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"### 3. Update documentation"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":6,"id":"0d683d84_d6a59a4f","line":79,"updated":"2026-05-14 09:54:51.000000000","message":"We can remove this line, since #File Alignment Reference is authoritative and this creates confusion","commit_id":"ebfc523e2d6051004e6ac33c01f4c731a49f6e87"},{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"405fd07cecd7596dcca7c8b3a79f6adcbf135e6b","unresolved":true,"context_lines":[{"line_number":84,"context_line":"for the component. Search `doc/source/` to find the right file — do not assume"},{"line_number":85,"context_line":"a filename from the component name. For example:"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"- Kolla-ansible settings → `doc/source/configuration/reference/kolla.rst`"},{"line_number":88,"context_line":"- OpenStack/kayobe settings → `doc/source/configuration/reference/kayobe.rst`"},{"line_number":89,"context_line":"- Host-group settings (firewall, sysctl, etc.) → `doc/source/configuration/reference/hosts.rst`"},{"line_number":90,"context_line":"- IPA → `doc/source/configuration/reference/ironic-python-agent.rst`"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"c68981bc_07651b14","line":87,"updated":"2026-05-14 08:29:32.000000000","message":"This should point to kolla-ansible.rst no ?\nWe could additionally add \nKolla (image builder) settings → kolla.rst line ?","commit_id":"ebfc523e2d6051004e6ac33c01f4c731a49f6e87"}],".agents/skills/sync-kolla-feature-flags/SKILL.md":[{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"e272e50ed43ee3eabeed4c9a91319feed17bac84","unresolved":true,"context_lines":[{"line_number":22,"context_line":"If `kolla-ansible/` does not exist, clone with:"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"```bash"},{"line_number":25,"context_line":"git clone https://github.com/openstack/kolla-ansible -b stable/\u003crelease\u003e kolla-ansible"},{"line_number":26,"context_line":"```"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"If `kolla-ansible/` already exists, checkout the correct branch:"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"00dfd21a_8d720eaf","line":25,"updated":"2026-05-14 08:33:49.000000000","message":".gitignore does not exclude kolla-ansible/ , so this clone dirties git status on first run and conflicts with AGENTS.md\u0027s \"Do not modify any files not tracked by git unless explicitly instructed\" rule. Confusing to clankers\n\nShould we default to a location outside the Kayobe checkout ? or just add to .gitignore ?\n\n(same problem with 2nd sync skill)","commit_id":"ebfc523e2d6051004e6ac33c01f4c731a49f6e87"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"ef3ac3468030fff6b1f2f75375e1deaca33fa14f","unresolved":true,"context_lines":[{"line_number":22,"context_line":"If `kolla-ansible/` does not exist, clone with:"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"```bash"},{"line_number":25,"context_line":"git clone https://github.com/openstack/kolla-ansible -b stable/\u003crelease\u003e kolla-ansible"},{"line_number":26,"context_line":"```"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"If `kolla-ansible/` already exists, checkout the correct branch:"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"b7192f0e_672435f4","line":25,"in_reply_to":"00dfd21a_8d720eaf","updated":"2026-05-14 10:31:14.000000000","message":"Good call. I did it there because my harness always prompts to read files outside of the directory tree. I\u0027m thinking .gigignore and maybe and agent working directory e.g .agent-workdir? What do you think would be the best solution?","commit_id":"ebfc523e2d6051004e6ac33c01f4c731a49f6e87"},{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"4cba885aa219ffff28162175f4c098d00a675d0f","unresolved":true,"context_lines":[{"line_number":22,"context_line":"If `kolla-ansible/` does not exist, clone with:"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"```bash"},{"line_number":25,"context_line":"git clone https://github.com/openstack/kolla-ansible -b stable/\u003crelease\u003e kolla-ansible"},{"line_number":26,"context_line":"```"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"If `kolla-ansible/` already exists, checkout the correct branch:"}],"source_content_type":"text/x-markdown","patch_set":6,"id":"ebb90a8e_b54b2cf4","line":25,"in_reply_to":"b7192f0e_672435f4","updated":"2026-05-14 11:59:06.000000000","message":"+1 both. Default .agent-workdir/ at repo root (gitignored), possibly add allow override via KAYOBE_AGENT_WORKDIR env var, and mention the convention in AGENTS.md so it\u0027s harness-agnostic.\nI believe most of them allow cwd subtree by default.","commit_id":"ebfc523e2d6051004e6ac33c01f4c731a49f6e87"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"0d17013fba1718fa278833734bad0bedcd8fd6be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"65842f95_d63439e1","updated":"2026-04-09 15:54:21.000000000","message":"For discussion at the PTG","commit_id":"e460a74544f8c004cf4ed87151129a7ae2301144"},{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"8b23a05f373bc33441abfb3f7427ba00b01c758b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"a0390a18_b63cde0f","in_reply_to":"65842f95_d63439e1","updated":"2026-04-22 10:13:29.000000000","message":"Nice skills :) I\u0027ll be happy to test them with different harnesses/models.\n\nIn theory with good description they should be automatically picked up whenever the agent feels the need to use them ?\n\nI have generated some knowledge docs for kayobe trying to follow the (not fully established yet ) conventions from https://review.opendev.org/c/openstack/agentic-workflows/+/985035 and https://review.opendev.org/c/openstack/agentic-workflows/+/985072. You think it\u0027s worth dropping all of it internally into Kayobe first, to have some reviewed version before we push it openstack/agentic-workflows ? or it would be a better idea to develop it \"in the open\" at openstack/agentic-workflows ?","commit_id":"e460a74544f8c004cf4ed87151129a7ae2301144"},{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"6c431abff9dbaf2660eb2b73ddca47c3d187b63d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3247d889_034366f4","in_reply_to":"7b064664_53633cc2","updated":"2026-04-22 11:04:04.000000000","message":"I just found about agentic-workflows yesterday (on Neutron PTG), had a brief look and the structure is still formalising, but it looks to be coalescing around skills/knowledge/personas per Openstack project , so having Kayobe / Kolla-ansible there makes sense in my opinion. Skills themselves are not loaded at session start, but only when needed, so there is no context pollution by having more of them.\n\nLets talk more on PTG","commit_id":"e460a74544f8c004cf4ed87151129a7ae2301144"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"7d6db551e921e245eb2c2d03ed362b83ce488510","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"7b064664_53633cc2","in_reply_to":"a0390a18_b63cde0f","updated":"2026-04-22 10:47:33.000000000","message":"Thanks for pointing out agentic-workflows, as I was not aware of that effort.\n\n\u003e You think it\u0027s worth dropping all of it internally into Kayobe first, to have some reviewed version before we push it openstack/agentic-workflows ? or it would be a better idea to develop it \"in the open\" at openstack/agentic-workflows ?\n\nInteresting question and I\u0027m not sure of the answer. I did propose it as a topic in this weeks kolla PTG session, so might have more of an opinion after that discussion. My initial thought is that this stuff should be maintained along side the code base. A few open questions: Could we use a hybrid approach where we have project specific knowledge alongside the source and still make use of agentic-workflows for project agnostic skills. How relevant would python centric skills be to an ansible code base?","commit_id":"e460a74544f8c004cf4ed87151129a7ae2301144"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"46a86a93851faf29dad3bbdf66d68f04e8383925","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a3d4124f_e1cc4113","updated":"2026-05-11 17:40:45.000000000","message":"Done. I\u0027m beginning to think we should just merge this and iterate. We can always switch to using stuff from agent-workflows if appropriate.","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"},{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"7c2e2ea8ce5d1d1705a24080afbbeb6564293cba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"215056fe_c6bf4598","updated":"2026-05-11 16:11:15.000000000","message":"GPU-powered review :)","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"},{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"4d8d3e02d535cc060b49e0e7ee5ee251a1079777","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d84656ba_b6bfec63","updated":"2026-05-14 10:10:03.000000000","message":"Few open threads + one Done resolution that needs another look (line 49 — kolla_base_distro_version is itself a counter-example). Nothing structural, LGTM after that","commit_id":"ebfc523e2d6051004e6ac33c01f4c731a49f6e87"},{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"e6fe1befa074a21ba727cecb570e45ecbe156798","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"736ccff0_46824672","updated":"2026-05-14 10:15:43.000000000","message":"Would both sync skills benefit from \"last validated against \u003crelease\u003e\" note at the top? This way next maintainer can tell at a glance whether the skill is still accurate or needs another sync pass before running.","commit_id":"ebfc523e2d6051004e6ac33c01f4c731a49f6e87"}],"AGENTS.md":[{"author":{"_account_id":35345,"name":"Grzegorz Koper","email":"grzegorzk@stackhpc.com","username":"gkoper"},"change_message_id":"7c2e2ea8ce5d1d1705a24080afbbeb6564293cba","unresolved":true,"context_lines":[{"line_number":39,"context_line":"- Use kebab-case names for playbooks in `ansible/`."},{"line_number":40,"context_line":"- Preserve the current YAML style and comment formatting in inventory defaults and example config."},{"line_number":41,"context_line":"- Custom Ansible plugins live in `ansible/action_plugins/`, `ansible/filter_plugins/`, `ansible/lookup_plugins/`, and `ansible/test_plugins/`."},{"line_number":42,"context_line":"- Plugin implementations often live in `kayobe/plugins/` with thin re-export wrappers in the `ansible/*_plugins/` directories. Put new implementation logic in `kayobe/plugins/` and add a wrapper under `ansible/*_plugins/` if following this pattern."},{"line_number":43,"context_line":"- Roles use standard Ansible layout such as `defaults/main.yml`, `tasks/main.yml`, and `vars/main.yml`."},{"line_number":44,"context_line":"- Put roles used by Kayobe playbooks under `ansible/roles/`."},{"line_number":45,"context_line":"- Treat the top-level `roles/` directory as Zuul/CI-focused content rather than the main home for Kayobe runtime roles."}],"source_content_type":"text/x-markdown","patch_set":4,"id":"e6da6805_21e49a3c","line":42,"updated":"2026-05-11 16:11:15.000000000","message":"Plugin guidance overstates current pattern. Some plugin kinds use kayobe/plugins/... re-export wrappers, but several action plugins in ansible/action_plugins/ are full implementations and kayobe/plugins/ does not mirror every plugin type. \n\nSafer guidance: follow nearest existing plugin of same kind.","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"},{"author":{"_account_id":28048,"name":"Will Szumski","email":"will@stackhpc.com","username":"jovial"},"change_message_id":"46a86a93851faf29dad3bbdf66d68f04e8383925","unresolved":false,"context_lines":[{"line_number":39,"context_line":"- Use kebab-case names for playbooks in `ansible/`."},{"line_number":40,"context_line":"- Preserve the current YAML style and comment formatting in inventory defaults and example config."},{"line_number":41,"context_line":"- Custom Ansible plugins live in `ansible/action_plugins/`, `ansible/filter_plugins/`, `ansible/lookup_plugins/`, and `ansible/test_plugins/`."},{"line_number":42,"context_line":"- Plugin implementations often live in `kayobe/plugins/` with thin re-export wrappers in the `ansible/*_plugins/` directories. Put new implementation logic in `kayobe/plugins/` and add a wrapper under `ansible/*_plugins/` if following this pattern."},{"line_number":43,"context_line":"- Roles use standard Ansible layout such as `defaults/main.yml`, `tasks/main.yml`, and `vars/main.yml`."},{"line_number":44,"context_line":"- Put roles used by Kayobe playbooks under `ansible/roles/`."},{"line_number":45,"context_line":"- Treat the top-level `roles/` directory as Zuul/CI-focused content rather than the main home for Kayobe runtime roles."}],"source_content_type":"text/x-markdown","patch_set":4,"id":"8b15b0ac_c3b856af","line":42,"in_reply_to":"e6da6805_21e49a3c","updated":"2026-05-11 17:40:45.000000000","message":"Done","commit_id":"e7076a4541cee50dfe5ad7d5f70e68fed4f2fcb0"}]}
