)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1604ce04f13e84dc65665b4258026fbbbf563e8a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"6bcfe352_1f7b9a91","updated":"2026-04-17 10:25:53.000000000","message":"Thanks for the patch ! Just -1 for some nits (used the review skill for your patch 😉)\n\nTwo small issues in the new README.md: a stale CONTRIBUTING.rst reference (should be .md) and inconsistent heading styles (setext vs ATX). The deduplication into AGENTS.md makes sense.","commit_id":"3e8b252acc0e8cbb964e47c0ed468e3263ee59c0"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3e520f4373d027e09f4efdaf0f5f17b563f9943a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c56530df_493a43a8","updated":"2026-04-17 10:43:05.000000000","message":"applying a single core rule for now, but I guess we need to discuss about the core policy in the TC discussion for the PTG.","commit_id":"3d51dde2dd8765af819bc71041e95014e04dfc34"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"667ffee5d5c716416a31c713ecc631c8e3af970c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"15df02c2_23bd5e74","updated":"2026-04-17 10:42:17.000000000","message":"thanks for the latest revision, works for me.","commit_id":"3d51dde2dd8765af819bc71041e95014e04dfc34"}],"CONTRIBUTING.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c5d1c3ff13b6a42a7e18309801b37e7b2535dd67","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"For more details on the Gerrit workflow, see the"},{"line_number":34,"context_line":"`Gerrit Workflow Guide \u003chttps://docs.openstack.org/contributors/code-and-documentation/using-gerrit.html\u003e`_."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"Adding a New Skill"},{"line_number":37,"context_line":"------------------"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"Skills follow the `Agent Skills specification"},{"line_number":40,"context_line":"\u003chttps://agentskills.io/specification\u003e`_ and live in ``.agents/skills/``."},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"1. Create a directory under ``.agents/skills/{skill-name}/``."},{"line_number":43,"context_line":"2. Add a ``SKILL.md`` file with YAML frontmatter (``name``, ``description``)"},{"line_number":44,"context_line":"   and a markdown body containing the skill instructions. See the"},{"line_number":45,"context_line":"   `specification \u003chttps://agentskills.io/specification\u003e`_ for the full format."},{"line_number":46,"context_line":"3. Optionally add ``scripts/``, ``references/``, or ``assets/`` subdirectories"},{"line_number":47,"context_line":"   for supporting files."},{"line_number":48,"context_line":"4. Validate the skill locally:"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"   .. code-block:: bash"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"      tox -e validate"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"   This runs `agentskills validate \u003chttps://agentskills.io/specification#validation\u003e`_"},{"line_number":55,"context_line":"   against all skills. The same check runs in CI on every Gerrit change."},{"line_number":56,"context_line":"5. Test the skill before submitting."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"Adding a New Project"},{"line_number":59,"context_line":"--------------------"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Skills are project-agnostic -- they discover project resources dynamically. To"},{"line_number":62,"context_line":"add support for a new OpenStack project:"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"1. Create a knowledge file. This can live either in this repository at"},{"line_number":65,"context_line":"   ``knowledge/{project}.md``, or in the project\u0027s own repository if the"},{"line_number":66,"context_line":"   community prefers to maintain it in-tree. The knowledge file should contain"},{"line_number":67,"context_line":"   the project\u0027s architecture, versioning rules, subsystem mappings, coding"},{"line_number":68,"context_line":"   conventions, and key references."},{"line_number":69,"context_line":"2. Optionally create project-specific personas in ``personas/``."},{"line_number":70,"context_line":"3. No changes to existing skills are needed."},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"Reporting Bugs"},{"line_number":73,"context_line":"--------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"7f19bc80_7632fd8b","side":"PARENT","line":70,"range":{"start_line":35,"start_character":1,"end_line":70,"end_character":44},"updated":"2026-04-17 09:59:35.000000000","message":"I removed this: it\u0027s all contained in `AGENTS.md` already so agents will pull it (so I can simply ask them \"how do I add a new skill / project\")","commit_id":"849de5a2045ca7fbd2f42dd8d0821551c9858376"}],"README.md":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1604ce04f13e84dc65665b4258026fbbbf563e8a","unresolved":true,"context_lines":[{"line_number":74,"context_line":"`@personas/name.md` syntax."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Contributing"},{"line_number":77,"context_line":"------------"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"If you would like to contribute to this project, please see `CONTRIBUTING.rst`"},{"line_number":80,"context_line":"and the [OpenStack Contributor"}],"source_content_type":"text/x-gfm","patch_set":1,"id":"6b4c939c_d125bfd5","line":77,"updated":"2026-04-17 10:25:53.000000000","message":"The Contributing, Bugs, and License headings use setext-style (--- underlines) while the rest of the file uses ATX-style (##). Looks like leftover RST formatting — would be cleaner to use ## Contributing, ## Bugs, ## License for consistency.","commit_id":"3e8b252acc0e8cbb964e47c0ed468e3263ee59c0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3c98ccf996ae88df0c7fab9a6dc187b7103ee55d","unresolved":false,"context_lines":[{"line_number":74,"context_line":"`@personas/name.md` syntax."},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"Contributing"},{"line_number":77,"context_line":"------------"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"If you would like to contribute to this project, please see `CONTRIBUTING.rst`"},{"line_number":80,"context_line":"and the [OpenStack Contributor"}],"source_content_type":"text/x-gfm","patch_set":1,"id":"a4e4be1e_985a343b","line":77,"in_reply_to":"6b4c939c_d125bfd5","updated":"2026-04-17 10:35:31.000000000","message":"Done","commit_id":"3e8b252acc0e8cbb964e47c0ed468e3263ee59c0"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1604ce04f13e84dc65665b4258026fbbbf563e8a","unresolved":true,"context_lines":[{"line_number":76,"context_line":"Contributing"},{"line_number":77,"context_line":"------------"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"If you would like to contribute to this project, please see `CONTRIBUTING.rst`"},{"line_number":80,"context_line":"and the [OpenStack Contributor"},{"line_number":81,"context_line":"Guide](https://docs.openstack.org/contributors/)."},{"line_number":82,"context_line":""}],"source_content_type":"text/x-gfm","patch_set":1,"id":"3acfbf55_65380579","line":79,"updated":"2026-04-17 10:25:53.000000000","message":"This still references CONTRIBUTING.rst, but this change renames the file to CONTRIBUTING.md. Should be updated to match.","commit_id":"3e8b252acc0e8cbb964e47c0ed468e3263ee59c0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3c98ccf996ae88df0c7fab9a6dc187b7103ee55d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"Contributing"},{"line_number":77,"context_line":"------------"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"If you would like to contribute to this project, please see `CONTRIBUTING.rst`"},{"line_number":80,"context_line":"and the [OpenStack Contributor"},{"line_number":81,"context_line":"Guide](https://docs.openstack.org/contributors/)."},{"line_number":82,"context_line":""}],"source_content_type":"text/x-gfm","patch_set":1,"id":"29a9407f_c7166b27","line":79,"in_reply_to":"3acfbf55_65380579","updated":"2026-04-17 10:35:31.000000000","message":"Done","commit_id":"3e8b252acc0e8cbb964e47c0ed468e3263ee59c0"}],"README.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c5d1c3ff13b6a42a7e18309801b37e7b2535dd67","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":"56e20468_184a906a","side":"PARENT","line":74,"range":{"start_line":23,"start_character":1,"end_line":74,"end_character":1},"updated":"2026-04-17 09:59:35.000000000","message":"I removed all of this for the same reason","commit_id":"849de5a2045ca7fbd2f42dd8d0821551c9858376"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"667ffee5d5c716416a31c713ecc631c8e3af970c","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":"d5bc0988_2cf2bd71","side":"PARENT","line":74,"range":{"start_line":23,"start_character":1,"end_line":74,"end_character":1},"in_reply_to":"56e20468_184a906a","updated":"2026-04-17 10:42:17.000000000","message":"once we agreed on the directory structure and the concepts, we could have a very short summary in the README but for now, given we still need a consensus, I agree with removing the duplication.","commit_id":"849de5a2045ca7fbd2f42dd8d0821551c9858376"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c5d1c3ff13b6a42a7e18309801b37e7b2535dd67","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":"------------"}],"source_content_type":"text/x-rst","patch_set":1,"id":"4e5288fb_d1922c59","side":"PARENT","line":139,"range":{"start_line":125,"start_character":1,"end_line":139,"end_character":58},"updated":"2026-04-17 09:59:35.000000000","message":"and this","commit_id":"849de5a2045ca7fbd2f42dd8d0821551c9858376"}]}
