本文へ移動
cccskills
無料GitHub で公開

issue-triage

Investigate one GitHub issue and act on it the /snag way. Fetches the issue and its comments, first checks it is still true (everything it names still exists), reads it through the repo's issue forms, classifies it (bug, feature, enhancement, or a design decision), checks whether it is real, reproducible and not already fixed, maps it to an area, reproduces it and finds the root cause, then shows one decision screen; the chosen fix is built test-first and committed on a fix branch, never pushed. Anything posted on the issue is drafted and shown first. Use when you have an issue number you want to act on.

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrockスター 46(GitHub 46 + cccskills 0)
連携ツールGitHub

実行スコア 未検証

インストール方法を見る

含まれるファイル(1)

  • SKILL.md13.0 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

/issue-triage: investigate one GitHub issue

This repo

  • Area map (Step 5), also used by /runtime-triage:

    KeywordsProbable area
    video, playback, player, OSD, trickplay, transcode, DoVi, AV1, multichannel, surroundcomponents/video
    library, ContentNode, SceneManager, data, items gridcomponents/data
    api, jellyfin, request, task, http, auth, loginsource/api
    translation, locale, language, i18n, en_USlocale
    util, helper, registry, config, global statesource/utils
    component, scene, focus, navigation, dialog, menu, buttoncomponents
    migration, bootstrap, main entrysource
    test, rooibos, spectests
    build, lint, BSC plugin, generator scriptscripts
  • Expected behavior (Step 4): docs/user/app-settings.md and docs/user/jellyfin-server-feature-matrix.md.

  • The fix (/snag's build): a change that touches logging gets the log-reviewer agent, never blanket-added logs.

Contract

Goal. Take one GitHub issue from filed to acted on in one session: a fix built, a decision put to the user, a reply asking the reporter for what is missing, or a recommendation to close. It checks before it fixes, stopping at the first check that settles it: is the issue still true (everything it names still exists), is it expected behavior, is it already fixed, is it reproducible. Then it reproduces it, names the root cause and follows /snag's method: a decision screen, the user's pick, the fix built test-first and committed, never pushed. It runs on Opus because classification, validation and root cause are judgment over real code.

Inputs. The arguments are an issue number; with none, ask for it. The skill reads the issue and its comments, the repo's issue forms, its issues and merged pull requests (duplicates, earlier fixes), the code and history the issue points at, and this skill's ## This repo (the area map, the docs that say what is expected behavior, how to reproduce here).

Outputs. One of: /snag's decision screen and, on the user's pick, a fix (its test, one commit on a fix/issue-{{N}} branch when it started on the default branch, and /snag's report); a comment drafted for the issue (missing detail, a duplicate, a support answer, or a recommendation to close citing the commit that removed its premise), posted only on approval; or a design question routed to a project.

Success criteria.

  • A stale premise, expected behavior, a duplicate, an earlier fix and a support question are each caught before any fix and answered as such.
  • The classification rests on the issue's shape first and its labels second; the area on this repo's area map; an ambiguous call is shown, not forced.
  • The issue's own acceptance criteria, when it states them, are what done means.
  • The fix is the user's pick, built test-first, committed on its own paths, not pushed; nothing reaches the issue without approval.

Failure modes to avoid.

  • Reproducing a ghost. A mechanism run against a path or setting that was since removed can still "reproduce" (a pattern matches a path whether or not the file exists). Check that what the issue names exists first.
  • Fixing before validating. User error, expected behavior, or a fix in a newer release is answered with a reply, not a change.
  • Inventing what the reporter left out. Ask on the issue for a missing version or repro step; never assume it.
  • Forcing a classification or an area. Surface the ambiguity; a wrong call misdirects everything after it.
  • Cutting the issue short. Read the whole body and every comment: the decisive detail is often in a later one.
  • Acting on the issue without asking. A comment, label, close or edit is public at once: draft it and show it first.
  • Claiming a test that did not run. A test that needs hardware, a service or credentials this machine lacks is reported as not run, and why.
  • Filing a followup for what the issue already tracks. The issue is the record; unbuilt findings go on it as a drafted comment, if anywhere.

When not to use.

  • The issue is a support question: answer it with the contact links, no investigation.
  • You want to file a new issue: that is /create-issue.
  • A failed CI run: that is /ci-triage. A flaw found mid-work with no issue: that is /snag.

Implementation

This skill's ## This repo holds the repo's own parts: the area map (what words in an issue point at which paths), the user docs that say what is expected behavior, how to reproduce in this repo (and what needs hardware or a service), and any routing its areas carry. Where a step needs one, it says so.

Step 1: Fetch

bash .claude/skills/pr/forge.sh issue view {{N}}

Never add 2>/dev/null: forge.sh passes the forge's own message on whole. Keep the body and every comment whole. A closed issue: say how it closed (stateReason, closedByPullRequestsReferences; both null means the forge records neither, as Forgejo does, so say that rather than guess) and ask in chat whether to revisit it before going on.

Step 2: Is it still true?

For every path, file, function, setting, command or workflow the issue names, check it exists now:

git ls-files | grep -iF '{{name}}'                     # a tracked file or folder
git grep -n -F '{{name}}'                              # a symbol, setting or command
git log --oneline --diff-filter=D -- '{{path}}'         # gone: which commit removed it
git log --oneline -S'{{name}}' | head -5               # gone: which commits last touched the text

Prefer git ls-files over ls: an untracked leftover must not answer for a tracked file. Premise gone: the outcome is a recommendation to close, citing the commit that removed it; go to Step 7 to draft that comment, and stop. Premise intact: continue.

Step 3: Read and classify

When the repo has issue forms, read them live (.github/ISSUE_TEMPLATE/*.yml, never a copied field list): each field appears in the body as ### {{its attributes.label}}, so the body splits into named fields. Without forms the body is plain Markdown. When the issue states acceptance criteria, keep them: they are what done means.

Classify, from the body's shape first and the labels second (and the shape alone when the repo has no labels): bug (something behaves wrongly, with steps or versions), feature (a new capability), enhancement (a change to an existing one), or arch-decision-needed (its options differ in architecture, even when filed as a bug). Ambiguous: show the two candidates and why. A support question (how something works): draft an answer with the contact links in .github/ISSUE_TEMPLATE/config.yml, if the repo has them, go to Step 7, and stop.

Search for a duplicate, open and closed:

bash .claude/skills/pr/forge.sh issue list --state all --search "{{2-3 keywords}}" --limit 10

A likely duplicate: show it in one line with its state, and ask in chat whether to draft a pointer comment (Step 7) or go on.

Step 4: Validate

Answer in order, each in a sentence with its evidence; stop at the first that settles it:

  1. Expected behavior? Read the user docs this skill's ## This repo names. Expected: draft the explaining reply (Step 7), and stop.
  2. Already fixed? Its closedByPullRequestsReferences, then bash .claude/skills/pr/forge.sh pr list --state merged --search "{{keywords}}" --limit 10, and git log --oneline -S'{{symbol}}' on the code it names. Fixed in a release newer than the reporter's version: the answer is to upgrade (Step 7), not a new fix.
  3. Reproducible? Are the steps specific enough to run? Not: draft a comment asking for exactly what is missing (Step 7); never fill the gap with a guess.
  4. Scope? Only the named spot, its area, or a pattern that repeats elsewhere. Say so honestly; a narrowed fix names what it leaves.

A feature or enhancement is validated the same way in spirit: does it already exist, does it fit the project, what does done look like. An arch-decision-needed issue, or anything too big for one session, goes to Step 8 as options, where later routes it.

Step 5: Area and context

Match the issue's words against the area map in this skill's ## This repo. List every matching area, or say uncertain area and search. Pick 2 to 5 files that matter (the code the issue names, its tests, the area's recent history: git log --oneline -10 -- {{area}}); read more as the work needs it.

Step 6: Reproduce and find the root cause

Reproduce it for real (this skill's ## This repo says how in this repo, and what needs a device or a service): run it, keep the command and what it showed. When it cannot run here, say what is missing. Then name the root cause at a file and line, not the first symptom; when the same cause likely sits elsewhere, search and list those places as a scope question.

Step 7: Anything posted on the issue

A comment, a label, a close or an edit is drafted, never sent. Write a comment to "$(git rev-parse --git-dir)/issue-comment.md" (it can never be committed there). When this repo's public posture is public, sweep it as /create-issue's Step 7 does (a home path, a person's name or email, a secret, another repository's or host's name) and remove what is private. Show it, and ask in chat: post, edit: <text> or cancel. On post: bash .claude/skills/pr/forge.sh issue comment {{N}} --body-file "$(git rev-parse --git-dir)/issue-comment.md"; a close is bash .claude/skills/pr/forge.sh issue close {{N}} --reason not-planned (or duplicate, or completed) only on its own approval.

Step 8: Decide and build, the /snag way

Read .claude/skills/snag/SKILL.md and follow its Steps 2 to 7, carrying in what Steps 2 to 6 here found (finish its Step 2 with the history, what depends on the code, and at least two options). Four differences:

  • The screen's first line is **Issue:** #{{N}} {{title}} ({{classification}}); when the issue states acceptance criteria, the screen lists them under Evidence.
  • asap and later file no followup: the issue already tracks the work. Offer instead to draft a comment carrying the findings (Step 7). Work that needs its own design or several sessions gets /start-project printed alone in its own block.
  • Before its Step 5 builds anything on the default branch, create the fix branch: git switch -c fix/issue-{{N}}. On any other branch, commit there. The commit body names the issue as #{{N}}.
  • Its report ends with one more line, by this repo's forge prs: value: always gives Next: push the branch (/pr opens its pull request, which links the issue). on-request gives Next: push as this repo's Landing says (/pr when you want a pull request).

Sub-agent invocation

A parent that wants an issue investigated without the conversation (another skill handing on an issue it filed) starts a sub-agent with model: "opus" and this Task prompt; the parent then shows /snag's decision screen, and any drafted comment, itself:

Read .claude/skills/issue-triage/SKILL.md and follow Steps 1 to 6 for issue {{N}}. Edit nothing, commit nothing, and post, label or close nothing on the issue. Report whether the issue is still true (and the commit that removed its premise if not), its classification and why, each validation answer with its evidence, the areas and the 2 to 5 files that matter, the reproduction command and what it showed or why it could not run, the root cause at a file and line, at least two options with their footprint and risk, and the text of any comment the issue should get. End your report with a "Captures for /log" section: one "- <type>: <title> — <body>" bullet per journal-worthy item this work surfaced, where <type> is one of [this repo's capture types](../../../AGENTS.md#capture-types); omit the section if there are none, and never write to journals yourself. A parent writing that prompt for an Explore sub-agent (which loads no instruction files) spells the types out from the slot in place of the link.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

コメント

ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。

まだコメントはありません。最初のコメントを書いてみませんか。

送信するとすぐに公開されます。メールアドレスや電話番号などの個人情報は書かないでください。URL は 2 つまでです。

0 / 1000 文字

このフォームは reCAPTCHA で保護されており、Google のプライバシーポリシーと利用規約が適用されます。

同じリポジトリのスキル

catchup

無料

Session-start briefing: where did I leave off, what is in flight, what needs attention. One tested script reads git, the journal (followups, running work, cadences) and tracked projects and prints every fixed-threshold check that fires; JellyRock's own aggregator adds open PRs, high-engagement bugs, recent bug reports, current-branch CI, pending handoffs, open upstream-watch issues (Jellyfin releases and release candidates, Roku OS), recent ADRs, tech debt and architecture-doc staleness. Ends with one Suggested next move that hands off to /log, /done, /issue-triage, /runtime-triage, /ci-triage or /server-upgrade. Mandated by AGENTS.md's catchup-discipline rule: run at the start of any genuine new session, after a multi-day gap, or whenever you ask what the state of the world is.

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrock462026年10月26日 更新

ci-triage

無料

Diagnose a failed CI workflow run and fix it the /snag way. A tested read-only script fetches the run, reports every failed job and step with the log region around its errors (not the post-job cleanup), and classifies each against this repo's gates.tsv, printing the banner a gate carries when its obvious fix is the wrong one. Then: re-run only what is transient, reproduce locally, find the root cause, and show one decision screen; the chosen fix is built test-first and committed on a fix branch, never pushed. Use when a CI run failed on a pull request or on the default branch.

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrock462026年10月26日 更新

DEPRECATED, replaced by the `enrich` phase built into /crash-report. The old flow filed crash issues first and enriched them one by one afterward. The new flow (stage, then enrich, then file) pulls the dashboard backtrace before filing, so issues are born complete and architectural-class crashes go to their epic instead of becoming standalone issues. Do not invoke it for new work: run /crash-report and paste the backtraces during its enrich step. It stays only as a redirect; the `enrich-issue` script subcommand still exists as a legacy escape hatch for a crash issue filed before the change.

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrock462026年10月26日 更新

Process a Roku weekly crash-report CSV (or a zip holding one or more CSVs) into tracked GitHub issues and architectural-epic evidence, enriching before filing (stage, then enrich, then file). STAGE parses and filters the CSV, groups by pkg-path signature, builds each cited app version in a temporary git worktree, maps the transpiled `.brs` line back to the source `.bs` line, runs the GitHub dedup search, and writes a local worksheet where every crash starts pending; a mechanism hint (task-launch, network, other) orders which to pull first but never authorizes a file. ENRICH folds in the per-crash backtraces you paste from Roku's dashboard (a 7-day window, one click per crash, no bulk export), extracts each `&hNN` exception code, and routes every crash to a disposition (nothing files or aggregates without a backtrace): `file` (a scoped bug becomes a new per-signature [crash] issue, born enriched), `aggregate` (a known architectural class: `&h29` big-library too-many-task-threads, `&h23` render-thread execution timeouts, the `&hec` init `m.global.constants` race; upserted as one flat record comment per `file·function·line·version` onto the class epic, never a standalone issue), or `watch` (accepted noise, a spike comment only). FILE performs the GitHub writes (create, comment or reopen for scoped bugs; the epic record upsert for architectural classes) and writes a run-summary handoff. Dedup-aware and idempotent. Use when a fresh Roku crash CSV arrives (weekly). A deep dive on one crash goes to `/issue-triage <N>` after filing.

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrock462026年10月26日 更新

Draft a GitHub issue body for the JellyRock repo from a Reddit/Discord post or free-form bug report and submit it via forge.sh. Reads the YAML form templates under .github/ISSUE_TEMPLATE/ to know which fields are required, fills them by extracting from the input, asks for any missing required fields, validates the body matches the chosen template's schema, then runs forge.sh issue create with the auto-labels the template defines. Use when you have a user report (paste from anywhere) and want to formalize it into a properly-structured GitHub issue.

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrock462026年10月26日 更新

dep-major

無料

Walk a major dependency-version bump (a Renovate major PR, possibly a grouped one carrying several deps, or a package you name) through JellyRock's major-bump SOP so the judgment steps run the same way every time. Resolves each package and its from and to versions, fetches the upstream changelog/migration guide for that range, classifies the breaking changes, greps the codebase for the call sites those breaks actually hit, runs the mechanical gate that fits the dependency's type (a runtime BrightScript lib: validate, build, lint:bs, then test:unit and test:rta on a device; JS or Node tooling: test:scripts, then run the affected script; GitHub Actions: the PR's own CI plus a trace of the conditional paths CI doesn't exercise), and returns a go/no-go with any required migration surfaced (and applied on request). Majors never automerge (the org Renovate config), so this is the human-review path. Use when a Renovate major PR appears, or before bumping a dependency's major version by hand. Not for patch or minor bumps (those automerge after a soak) or for Jellyfin server releases (use /server-upgrade).

日本語の概要は準備中です。原文の説明を表示しています。

jellyrock/jellyrock462026年10月26日 更新

jellyrock のスキルをすべて見る

このスキルの問題を報告する