Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2231935/?format=api
{ "id": 2231935, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2231935/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260501155141.2176290-1-alex.bennee@linaro.org/", "project": { "id": 14, "url": "http://patchwork.ozlabs.org/api/1.1/projects/14/?format=api", "name": "QEMU Development", "link_name": "qemu-devel", "list_id": "qemu-devel.nongnu.org", "list_email": "qemu-devel@nongnu.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260501155141.2176290-1-alex.bennee@linaro.org>", "date": "2026-05-01T15:51:41", "name": "[RFC] .eca: add an issue triager agent skill", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "05216357aa5b44e008bd0111c5c91f8ab1b50da6", "submitter": { "id": 39532, "url": "http://patchwork.ozlabs.org/api/1.1/people/39532/?format=api", "name": "Alex Bennée", "email": "alex.bennee@linaro.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/qemu-devel/patch/20260501155141.2176290-1-alex.bennee@linaro.org/mbox/", "series": [ { "id": 502477, "url": "http://patchwork.ozlabs.org/api/1.1/series/502477/?format=api", "web_url": "http://patchwork.ozlabs.org/project/qemu-devel/list/?series=502477", "date": "2026-05-01T15:51:41", "name": "[RFC] .eca: add an issue triager agent skill", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/502477/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2231935/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2231935/checks/", "tags": {}, "headers": { "Return-Path": "<qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=cNZAS8di;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org\n (client-ip=209.51.188.17; helo=lists1p.gnu.org;\n envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org;\n receiver=patchwork.ozlabs.org)" ], "Received": [ "from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17])\n\t(using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g6bCZ498qz1y04\n\tfor <incoming@patchwork.ozlabs.org>; Sat, 02 May 2026 01:52:40 +1000 (AEST)", "from localhost ([::1] helo=lists1p.gnu.org)\n\tby lists1p.gnu.org with esmtp (Exim 4.90_1)\n\t(envelope-from <qemu-devel-bounces@nongnu.org>)\n\tid 1wIq9k-0000JY-6E; Fri, 01 May 2026 11:51:56 -0400", "from eggs.gnu.org ([2001:470:142:3::10])\n by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)\n (Exim 4.90_1) (envelope-from <alex.bennee@linaro.org>)\n id 1wIq9i-0000JC-NW\n for qemu-devel@nongnu.org; Fri, 01 May 2026 11:51:54 -0400", "from mail-wr1-x443.google.com ([2a00:1450:4864:20::443])\n by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)\n (Exim 4.90_1) (envelope-from <alex.bennee@linaro.org>)\n id 1wIq9f-0005hb-Uk\n for qemu-devel@nongnu.org; Fri, 01 May 2026 11:51:54 -0400", "by mail-wr1-x443.google.com with SMTP id\n ffacd0b85a97d-44a044cb827so1032406f8f.0\n for <qemu-devel@nongnu.org>; Fri, 01 May 2026 08:51:51 -0700 (PDT)", "from draig.lan ([185.124.0.195]) by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-44b63d78692sm1705171f8f.27.2026.05.01.08.51.48\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Fri, 01 May 2026 08:51:49 -0700 (PDT)", "from draig.lan (localhost [IPv6:::1])\n by draig.lan (Postfix) with ESMTP id 13B385F8FC;\n Fri, 01 May 2026 16:51:48 +0100 (BST)" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1777650710; x=1778255510; darn=nongnu.org;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:from:to:cc:subject:date:message-id:reply-to;\n bh=Fj+vpUcgS+AUrB1kqd8Y5UU5FXDMZtAf4zagddR/a5Q=;\n b=cNZAS8diNPFZeqtrVQkLlnHqjiIKHOnS9vs+TMnC5qrU7PCGZd/PHLEKguKffKTfSp\n jbjfeVgZhpxLoGCiaci81yuAOeBKApGqWJ/NAlAyZPuI/H9oFtuNoT49z8kc1sURIeOe\n ZUZ6GkGmePP4tqhuweD5NTO6kj8d0ebByV5VQus4OCVGMZ/fRUTZba+ojzZl9eHHEU+9\n 0Mw+nLguympls6Zh6NqJ1WQ1twn9phINqZrNG4m15XWQq4NqX+pmreZvFhlM8d+SmcFr\n 5JRJ2kQX8nkJVM3yPgrq5VtJWxsEB01EpEH2kCQDjNjaCtXkEt/f6tUcittuulUXP/ED\n Dq2g==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1777650710; x=1778255510;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date\n :message-id:reply-to;\n bh=Fj+vpUcgS+AUrB1kqd8Y5UU5FXDMZtAf4zagddR/a5Q=;\n b=f1DY6Pqx211UZh8hqcCiqTOxvkVjlH8sEz8ikWnd1P3izb3wCvwlpFVKGoIZPYO2r8\n cNgmitgZqvwVrZHdmryjuRk2owf6zFn/JfkQKspQemN0B/v8/S4KxiH++eVWSp3WYB6A\n h77PAijyG9Sp4DcjaKCQ2H0qGiTNMyY9NIhqoNAM1feYWb/wFKLzXnxRCYWsA7YhDMks\n 48gW6SuqCK6CWUiZFIAxBqhXadLjmU3aoglyeO7XpmOZzbKRJ5n9xeKl/OuMkqHrfn65\n bK4deXTy7SmeBmjtQ79xahbKCa3aAV9H2SQ/nlCb5uKkOuasKdEg+vgz+EloDnlk/wpm\n W4aA==", "X-Gm-Message-State": "AOJu0YwrqDlPa23f0dgpwxH02a8dwicfuudU/hcTSK/DfnxWdipdzm3g\n 35/a79W+9n0vN0EZO6Ugb8xlTaR3zr4f+Z7VpubwD4AFC/2pageOyJNlzkaJ458Uyg0=", "X-Gm-Gg": "AeBDiesbwv9aEa1PogrStMD/8znajCw3uB3kCYvUkHtb0ou/4QNCtDLc/CYe/TSjKzI\n D/x+V/JPL3Z5ws4Hws7SoyGjbY80JnKyNU2+VvbGoh5Z8fDH0liQI7MokTHS0ybTBeve5DVZVSh\n vNihRRcrAFU+qakEIW8ol7b4aOfBzc3+9Idkj39BfmxbzgUbAhLBg66jdn4FJQmT3AAhHaiNTl2\n VLQNZCXyC4HTPqFflSCbAsx3vGEm/ulmO8vQY//ltSqe3nsqZfzmtzhLX9MH7VDUOf2niG4SaSO\n qGX8Mzt2NMpnjEB8lXlpBvBxASqVgOrt2zo9XSEj56tzMDulpzUjb0OAn4hUvFrwH985hKulty1\n 5VSysjR7XX+ET66boWbAwVlycnfUN9S8Ii77engI/CIGuRf/ZXLkWkkMb/94zi7zi59WWRLnp1c\n QKOBp47go67dqmEcNaXOnvqyP0pe/6VpYc0w==", "X-Received": "by 2002:a05:6000:1789:b0:43d:762e:76ba with SMTP id\n ffacd0b85a97d-44bb4dd9211mr44060f8f.17.1777650709696;\n Fri, 01 May 2026 08:51:49 -0700 (PDT)", "From": "=?utf-8?q?Alex_Benn=C3=A9e?= <alex.bennee@linaro.org>", "To": "qemu-devel@nongnu.org", "Cc": "berrange@redhat.com, =?utf-8?q?Alex_Benn=C3=A9e?= <alex.bennee@linaro.org>", "Subject": "[RFC PATCH] .eca: add an issue triager agent skill", "Date": "Fri, 1 May 2026 16:51:41 +0100", "Message-ID": "<20260501155141.2176290-1-alex.bennee@linaro.org>", "X-Mailer": "git-send-email 2.47.3", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=UTF-8", "Content-Transfer-Encoding": "8bit", "Received-SPF": "pass client-ip=2a00:1450:4864:20::443;\n envelope-from=alex.bennee@linaro.org; helo=mail-wr1-x443.google.com", "X-Spam_score_int": "-20", "X-Spam_score": "-2.1", "X-Spam_bar": "--", "X-Spam_report": "(-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1,\n DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1,\n RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,\n SPF_PASS=-0.001 autolearn=ham autolearn_force=no", "X-Spam_action": "no action", "X-BeenThere": "qemu-devel@nongnu.org", "X-Mailman-Version": "2.1.29", "Precedence": "list", "List-Id": "qemu development <qemu-devel.nongnu.org>", "List-Unsubscribe": "<https://lists.nongnu.org/mailman/options/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=unsubscribe>", "List-Archive": "<https://lists.nongnu.org/archive/html/qemu-devel>", "List-Post": "<mailto:qemu-devel@nongnu.org>", "List-Help": "<mailto:qemu-devel-request@nongnu.org?subject=help>", "List-Subscribe": "<https://lists.nongnu.org/mailman/listinfo/qemu-devel>,\n <mailto:qemu-devel-request@nongnu.org?subject=subscribe>", "Errors-To": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org", "Sender": "qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org" }, "content": "While triaging the issue tracker I wondered if this would be a\nsuitable job for an AI agent. Unfortunately the OSS program doesn't\ngive any credits to run agents in gitlab. However I do have access to\nmodels from my editor and ECA so I built one and tested it on a few\nissues.\n\nObviously this can't apply as is because it probably encodes too much\nof my local setup (using pass for API keys) and uses the ECA as my\npreferred coding agent. I assume at some point there will be agreement\nbetween all the agents where skill live.\n\nSigned-off-by: Alex Bennée <alex.bennee@linaro.org>\n---\n .eca/skills/issue-triager/SKILL.md | 77 ++++++++++\n .eca/skills/issue-triager/assets/labels.txt | 132 ++++++++++++++++++\n .eca/skills/issue-triager/evals/evals.json | 17 +++\n .../issue-triager/scripts/update_labels.sh | 13 ++\n 4 files changed, 239 insertions(+)\n create mode 100644 .eca/skills/issue-triager/SKILL.md\n create mode 100644 .eca/skills/issue-triager/assets/labels.txt\n create mode 100644 .eca/skills/issue-triager/evals/evals.json\n create mode 100755 .eca/skills/issue-triager/scripts/update_labels.sh", "diff": "diff --git a/.eca/skills/issue-triager/SKILL.md b/.eca/skills/issue-triager/SKILL.md\nnew file mode 100644\nindex 00000000000..2498687a217\n--- /dev/null\n+++ b/.eca/skills/issue-triager/SKILL.md\n@@ -0,0 +1,77 @@\n+---\n+name: issue-triager\n+description: can help triaging GitLab issues for the QEMU project\n+---\n+\n+# Instructions\n+\n+This skill provides specialized instructions for triaging GitLab issues for the QEMU project.\n+\n+## Goal\n+Automate the initial triage of new bug reports and feature requests in the QEMU GitLab repository.\n+\n+## Prerequisites\n+- `glab` CLI tool installed.\n+- GitLab API Token: Use `env GITLAB_TOKEN=$(pass gitlab-api)` for all `glab` commands.\n+- Target Repo: Use `-R qemu-project/qemu` if not in a clone, or ensure the remote is set correctly.\n+\n+## Asset Management (Label Cache)\n+This skill uses a cached list of labels to avoid unnecessary API calls and ensure consistent labeling.\n+- **Cache Location:** `assets/labels.txt` relative to this skill.\n+- **Updating the Cache:** If the user asks to update the labels, or if you suspect a label is missing, run the provided script:\n+ ```bash\n+ cd .eca/skills/issue-triager/scripts && ./update_labels.sh\n+ ```\n+- **Using the Cache:** Before applying labels, ALWAYS read `assets/labels.txt` (or use `grep` on it) to review the available labels and their descriptions. This ensures you use the exact spelling and understand the intent behind the label (e.g., `kind::Bug`, `subsystem::block`). Do NOT guess label names.\n+\n+## Triage Workflow\n+\n+### 1. Information Gathering\n+Fetch the issue details:\n+```bash\n+env GITLAB_TOKEN=$(pass gitlab-api) glab issue view <issue-id> -R qemu-project/qemu --comments\n+```\n+\n+### 2. Evaluate Completeness\n+Analyze the issue against the bug template requirements:\n+- **Host Arch/OS**: Is the host environment specified?\n+- **Guest Arch/OS**: Is the guest environment specified?\n+- **QEMU Version**: Is the version mentioned?\n+- **Reproduction Steps**: Are there clear steps to reproduce?\n+- **Expected vs Actual**: Is the bug clearly described?\n+\n+**Actions:**\n+- If critical information is missing (especially repro steps), add the `Workflow::Needs Info` label and post a polite comment asking for the missing details.\n+- If the issue is well-defined, proceed to categorization.\n+\n+### 3. Categorization & Labeling\n+Apply labels based on the issue content. **Crucially, consult `assets/labels.txt` to find the exact matching labels for the categories below.**\n+\n+#### Kinds\n+- `kind::Bug`: For unexpected behavior.\n+- `kind::Feature Request`: For new functionality.\n+- `kind::Cleanup`: For code refactoring or style issues.\n+\n+#### Targets (target:*)\n+Detect the guest architecture being used (e.g., `target:arm`, `target:riscv`, `target:i386`).\n+\n+#### Accelerators (accel:*)\n+Detect the accelerator mentioned (e.g., `accel:kvm`, `accel:tcg`, `accel:hvf`).\n+\n+#### Subsystems (subsystem:*)\n+Identify the relevant subsystem (e.g., `subsystem:block`, `subsystem:net`, `subsystem:virtio`, `subsystem:migration`).\n+\n+#### Testcases\n+- If the issue provides a minimal C program, a shell script, or a specific disk image to reproduce the bug, apply the `Testcase` label.\n+\n+### 4. Updating the Issue\n+Apply the labels and optionally assign a priority if clear:\n+```bash\n+env GITLAB_TOKEN=$(pass gitlab-api) glab issue update <issue-id> -R qemu-project/qemu --label \"kind::Bug,target:arm,Workflow::Triaged\"\n+```\n+\n+## Guidelines\n+- Be polite and professional in comments.\n+- Use `Workflow::Triaged` once categorization is complete.\n+- Avoid assigning issues to specific people unless they are explicitly mentioned or are the known maintainer for a very specific subsystem.\n+- Use the `scripts/get_maintainer.pl` logic (via file paths mentioned in the issue) to identify potential subsystems.\ndiff --git a/.eca/skills/issue-triager/assets/labels.txt b/.eca/skills/issue-triager/assets/labels.txt\nnew file mode 100644\nindex 00000000000..5fe8c28deac\n--- /dev/null\n+++ b/.eca/skills/issue-triager/assets/labels.txt\n@@ -0,0 +1,132 @@\n+ACPI Power Management related (ACPI / SMBIOS / HEST / GHES)\n+Audio Audio devices; both backend (host audio) and frontend (guest audio)\n+Audit Tooling A group for bugs and issues found via automated tooling such as fuzzing, sanitizers or AI\n+Audit Tooling::AI For bugs found with AI assisted tools such as Mythos and other similar things\n+Audit Tooling::Fuzzer Issues found via fuzzing. For security issues, please consult https://www.qemu.org/contribute/security-process/\n+Audit Tooling::Sanitizer For issues found using sanitizers such as asan, lsan and tsan\n+Bite Sized Candidates for first contributions; see also https://wiki.qemu.org/Contribute/BiteSizedTasks\n+Build System configure, make, Meson, ninja, gcc, clang, ccache, etc.\n+CI Continuous Integration; gitlab, travis, patchew, etc.\n+CLI Command Line Interface\n+Chardev Character device backends and related issues\n+Closed::Duplicate There is already another ticket that is about the same issue\n+Closed::Fixed The issue was fixed. Yay!\n+Closed::Invalid This issue was not really a problem\n+Closed::NotOurBug This is a bug, but not a bug in QEMU. Please report it and/or include a link to the report.\n+Closed::NotReproducible This issue was not reproducible\n+Closed::UnbackedFeature Nobody was willing to work on this feature request\n+Closed::WontFix The issue was acknowledged, but the fix would be too complex, too expensive, or would introduce other problems.\n+Cryptography \n+Documentation Sphinx documentation, man pages, the wiki, --help output, etc.\n+GDB Issues relating to using GDB via the gdbstub\n+GUI Graphical User Interface (gtk, SDL, curses, VNC, spice, ...)\n+GUI::Cocoa Cocoa\n+GUI::DBus DBus\n+GUI::GTK \n+GUI::SDL SDL\n+GUI::SPICE SPICE\n+GUI::VNC \n+Guest Agent Issues related to the qemu-guest-agent binary. https://wiki.qemu.org/Features/GuestAgent\n+Hard \n+Launchpad Issues migrated from Launchpad\n+Migration \n+Modules \n+Networking \n+Python Python library issues (./python/)\n+QAPI/QMP QEMU API / QEMU Machine Protocol, HMP and CLI, etc.\n+QOM QEMU Object Model\n+Regression \n+Security \n+Semihosting Semihosting calls provide a simple ABI for early bring-up of embedded devices and provide a way to output to the console and do basic file i/o while being debugged\n+Softfloat QEMU's FPU emulation code (TCG only)\n+Stable::can't fix The bug was reported on a stable branch but the fix is too invasive for backporting\n+Stable::obsolete The bug was reported on a stable branch that is not maintained anymore\n+Stable::to backport The bug was reported on a stable branch and needs to be backported on the next release from the branch\n+Storage Block subsystem, Storage devices, etc.\n+TCG plugins Anything related to the TCG plugins feature\n+TestCase The report includes a testcase\n+Tests qtests, iotests, acceptance tests, VM tests, docker tests, and more.\n+USB \n+VFIO \n+accel: HAX Intel's Hardware Accelerated Execution Manager (HAXM)\n+accel: HVF Apple Hypervisor Framework\n+accel: KVM Linux Kernel-based Virtual Machine\n+accel: TCG QEMU Tiny Code Generator\n+accel: WHPX Microsoft Windows Hypervisor Platform (WHPX)\n+accel: Xen Xen Hypervisor\n+block:9p The 9p network file system\n+block:NVMe \n+block:curl \n+block:nbd \n+block:nfs Issues related to the NFS backend\n+block:qcow2 \n+block:ssh \n+block:vmdk \n+bsd-user \n+device: PCI \n+device: TPM Trusted Platform Module (TPM) devices\n+device:graphics Issues relating to display device emulation, or rendering in general. See also \"GUI\".\n+device:input Keyboards, Mice, Touchscreens, HIDs, etc.\n+device:iommu IOMMU and SMMU\n+device:pflash Parallel NOR flashes emulation\n+device:sdmmc SD or (e)MMC cards emulation\n+device:virtio virtio-related issues. https://www.linux-kvm.org/page/Virtio\n+device:watchdog \n+efi EFI firmware related issues\n+flaky-ci For test cases that are flaky when run under our CI\n+gitlab \n+guest: AIX \n+guest: BSD Guest OS is BSD (NetBSD/FreeBSD/OpenBSD/etc)\n+guest: Linux Guest OS is Linux/Linux-based\n+guest: Windows Microsoft Windows guest\n+guest: macOS Apple macOS / Darwin as guest OS\n+guest: os2 \n+host: aarch64 Bugs reproducible on AArch64 hosts\n+host: arm Bugs reproducible on ARM hosts\n+host: loongarch64 Bugs reproducible on LoongArch64 hosts.\n+host: mips Bugs reproducible on MIPS hosts\n+host: ppc Bugs reproducible on Power hosts\n+host: riscv Bugs reproducible on RISC-V hosts\n+host: s390 Bugs reproducible on s390 hosts\n+host: sparc64 Bugs specific to Sparc64 hosts\n+host: x86 Bugs reproducible on x86 hosts\n+host:32bit These are mostly TCG related bugs where we sometimes struggle with emulating larger guests, especially atomic and address space issues.\n+hostos: BSD FreeBSD, OpenBSD, NetBSD, and derivatives as host OSes\n+hostos: Linux Linux-based host operating systems (Fedora, RHEL/CentOS, Debian, Ubuntu, openSuSE et al)\n+hostos: Windows Microsoft Windows host OS\n+hostos: macOS Apple macOS / Darwin as a host OS\n+icount issues relating to icount, deterministic execution and record/replay functionality\n+kind: Not user visible \n+kind::Bug Bug or defect in functionality.\n+kind::Feature Request Feature request or new functionality.\n+kind::Task Research, investigations, and miscellaneous issues.\n+libvfio-user \n+linux-user \n+qemu-img \n+spice \n+sysadmin \n+target: alpha DEC Alpha [alpha]\n+target: arm Arm AArch32 or AArch64 [arm, aarch64]\n+target: avr Atmel AVR [avr]\n+target: hexagon Qualcomm Hexagon [hexagon]\n+target: hppa Hewlett-Packard Precision Architecture; HP/HP, PA-RISC [hppa]\n+target: i386 Intel/AMD x86 [i386, x86_64]\n+target: loongarch loongarch64 target architecture\n+target: m68k Motorola 68000 [m68k]\n+target: microblaze Xilinx MicroBlaze [microblaze, microblazeel]\n+target: mips MIPS [mips, mipsel, mips64, mips64el]\n+target: nios2 Altera Nios II [nios2]\n+target: openrisc OpenRISC [or1k]\n+target: ppc IBM Power Architecture, PowerPC [ppc, ppc64, ppc64le]\n+target: riscv RISC-V [riscv32, riscv64]\n+target: rx Renesas RX [rx]\n+target: s390x IBM Z, SystemZ, zSeries [s390x]\n+target: sh4 Renesas SuperH [sh4, sh4eb]\n+target: sparc Sun Microsystems SPARC [sparc, sparc64]\n+target: tricore Infineon TriCore [tricore]\n+target: xtensa Tensilica Xtensa [xtensa, xtensaeb]\n+workflow::Confirmed Bugs that have been confirmed and reproduced.\n+workflow::In Progress Someone is working on this issue.\n+workflow::Needs Info Issue has insufficient information to verify.\n+workflow::Patch available A patch is available\n+workflow::Triaged Issue has been triaged and given a topic label.\ndiff --git a/.eca/skills/issue-triager/evals/evals.json b/.eca/skills/issue-triager/evals/evals.json\nnew file mode 100644\nindex 00000000000..4cf60b60259\n--- /dev/null\n+++ b/.eca/skills/issue-triager/evals/evals.json\n@@ -0,0 +1,17 @@\n+{\n+ \"skill_name\": \"issue-triager\",\n+ \"evals\": [\n+ {\n+ \"id\": 1,\n+ \"prompt\": \"Update the cached list of GitLab labels for the QEMU project.\",\n+ \"expected_output\": \"The skill should fetch the latest labels from GitLab and save them to the skill's assets directory.\",\n+ \"files\": []\n+ },\n+ {\n+ \"id\": 2,\n+ \"prompt\": \"Triage issue #1234. Assume the user provided clear steps but no subsystem label is obvious.\",\n+ \"expected_output\": \"The skill should read the cached label list (not fetch from GitLab) and apply relevant kind/target labels.\",\n+ \"files\": []\n+ }\n+ ]\n+}\n\\ No newline at end of file\ndiff --git a/.eca/skills/issue-triager/scripts/update_labels.sh b/.eca/skills/issue-triager/scripts/update_labels.sh\nnew file mode 100755\nindex 00000000000..550df07ff6b\n--- /dev/null\n+++ b/.eca/skills/issue-triager/scripts/update_labels.sh\n@@ -0,0 +1,13 @@\n+#!/usr/bin/env bash\n+set -e\n+\n+if [ -z \"$GITLAB_TOKEN\" ]; then\n+ echo \"GITLAB_TOKEN is not set. Attempting to fetch via pass...\"\n+ export GITLAB_TOKEN=$(pass gitlab-api)\n+fi\n+\n+echo \"Fetching labels from qemu-project/qemu...\"\n+# Fetch labels using API and format as \"Name Description\"\n+glab api /projects/qemu-project%2Fqemu/labels --paginate | jq -r '.[] | [ .name, .description ] | @tsv' | column -t -s $'\\t' > ../assets/labels.txt\n+\n+echo \"Labels cached in assets/labels.txt\"\n", "prefixes": [ "RFC" ] }