triage-frontend-issues
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseTriage Frontend Issues
前端问题分类处理
Archive non-actionable noise from the issue queue: only archive, always , always with a stated reason. Issues that look actionable in our code, or that you cannot confidently classify, must be skipped.
sentry/javascriptuntilEscalating归档Sentry 问题队列中无操作价值的噪声:仅执行归档操作,始终使用模式,且必须注明原因。对于看起来在我们代码中有操作价值的问题,或者你无法自信分类的问题,必须跳过。
javascriptuntilEscalatingHard Rules
硬性规则
These rules override anything else. Do not relax them.
- Project scope. Only operate on , project slug
organizationSlug=sentry. If asked to triage a different project, stop and ask the user to confirm.javascript - Archive only. The only status mutation permitted is . Never resolve, never unresolve, never assign, never delete, never bulk-update fields other than status.
status=ignored - Always . Use
untilEscalating. Never useignoreMode=untilEscalating,forever,forDuration, oruntilOccurrenceCount. If the user asks for a different mode, stop and have them archive that issue manually — this skill does not perform non-escalating archives.untilUserCount - Always include a . The
reasonmust be a short, factual sentence naming the category fromreason(e.g., "Third-party library noise — echarts internals; not actionable in our code").references/archive-criteria.md - Never touch issues outside the unresolved queue. Skip anything with of
status,resolved, orignored.reprocessing - Never archive without confirmation. Build a full plan, show it to the user, wait for explicit approval before calling . A single approval covers the displayed plan only; new batches need new approval.
update_issue - When in doubt, skip. If an issue could plausibly be a real bug in our code, do not archive it. Surface it as in the plan with a one-line note.
needs-human
这些规则优先于其他任何要求,不得放宽。
- 项目范围:仅对、项目slug为
organizationSlug=sentry的项目操作。如果被要求分类处理其他项目,请停止并让用户确认。javascript - 仅归档:唯一允许的状态变更为。绝不标记解决、取消解决、分配、删除,绝不批量更新状态以外的字段。
status=ignored - 始终使用:使用
untilEscalating。绝不使用ignoreMode=untilEscalating、forever、forDuration或untilOccurrenceCount。如果用户要求使用其他模式,请停止并让他们手动归档该问题——本skill不执行非升级型归档。untilUserCount - 必须包含:
reason必须是简短、符合事实的句子,引用reason中的类别(例如:"第三方库噪声 — echarts内部逻辑;在我们的代码中无操作价值")。references/archive-criteria.md - 绝不处理未解决队列以外的问题:跳过任何为
status、resolved或ignored的问题。reprocessing - 未经确认绝不归档:制定完整计划,展示给用户,等待明确批准后再调用。一次批准仅适用于展示的计划;新批次需要新的批准。
update_issue - 存疑则跳过:如果某个问题可能是我们代码中的真实bug,请勿归档。在计划中标记为并附上一行说明。
needs-human
Prerequisites
前置条件
- Sentry MCP authenticated via . Required tools:
mcp.sentry.dev,search_issues,get_sentry_resource.update_issue - If is not available, stop and ask the user to authenticate the Sentry MCP server.
update_issue
- 通过完成Sentry MCP认证。所需工具:
mcp.sentry.dev、search_issues、get_sentry_resource。update_issue - 如果不可用,请停止并让用户认证Sentry MCP服务器。
update_issue
Inputs
输入
$ARGUMENTS| Input shape | Meaning |
|---|---|
Sentry issue URL ( | Triage that single issue. |
Issue short ID ( | Triage that single issue. |
Sentry issue query (contains a colon, e.g. | Use as the search query. |
| Empty | Use the default triage queue: |
If is ambiguous, ask the user to clarify before searching.
$ARGUMENTS$ARGUMENTS| 输入格式 | 含义 |
|---|---|
Sentry问题URL( | 分类处理该单个问题。 |
问题短ID( | 分类处理该单个问题。 |
Sentry问题查询(包含冒号,例如 | 用作搜索查询。 |
| 空值 | 使用默认分类队列: |
如果含义模糊,请在搜索前让用户澄清。
$ARGUMENTSWorkflow
工作流
1. Load the queue
1. 加载队列
For single-issue input:
- Call or
get_sentry_resource(url=<issue-url>).get_sentry_resource(resourceType='issue', organizationSlug='sentry', resourceId=<shortId>) - Confirm is the javascript frontend project. If not, stop.
Project
For query/default input:
- Call .
search_issues(organizationSlug='sentry', projectSlugOrId='javascript', query=<query>, sort='new', limit=50) - Then call for each result in parallel to get culprit, substatus, assignee, and stack-frame hints (the search response omits some fields).
get_sentry_resource
Skip immediately if any of these are true on an issue:
- is not
status(already archived, resolved, or in reprocessing).unresolved - is set to a human (someone is already owning it).
assignedTo - is set to a team other than
assignedTo/frontendand the issue looks team-specific (let the owning team triage).issues
对于单个问题输入:
- 调用或
get_sentry_resource(url=<issue-url>)。get_sentry_resource(resourceType='issue', organizationSlug='sentry', resourceId=<shortId>) - 确认为javascript前端项目。如果不是,请停止。
Project
对于查询/默认输入:
- 调用。
search_issues(organizationSlug='sentry', projectSlugOrId='javascript', query=<query>, sort='new', limit=50) - 然后并行调用获取每个结果的culprit、substatus、assignee和栈帧提示(搜索响应会省略部分字段)。
get_sentry_resource
如果问题符合以下任一条件,立即跳过:
- 不是
status(已归档、已解决或正在重新处理)。unresolved - 已分配给人工用户(已有专人负责)。
assignedTo - 已分配给
assignedTo/frontend以外的团队,且问题看起来是该团队专属的(由所属团队自行分类处理)。issues
2. Classify each issue
2. 分类每个问题
Read for the category taxonomy with recognition heuristics and examples. For each candidate issue, produce one of:
references/archive-criteria.md| Decision | Meaning |
|---|---|
| Matches a documented category; include the category name in the reason. |
| Could be a real bug in our code, or insufficient evidence; do not archive. |
| Looks like noise but doesn't cleanly fit a category, or volume is unusually high; flag for user review. |
When evaluating, weight these signals (in this order):
- Top non-Sentry-SDK frame. If the top in-app frame is in ,
node_modules/, a third-party host, orchrome-extension://, this is a strong archive signal.<unknown> - Title pattern. Many archives are recognizable from the title alone (see criteria reference).
- Volume is not a veto. Some high-volume issues (10k+ events, thousands of users) are still archive-worthy if the top frame is third-party. Volume alone never forces archive either.
- Recency. Single-event issues older than 30 days with no recurrence are usually noise.
- Customer org spread. If events come from one customer subdomain only (check tag), it is likely customer-environment noise.
customerDomain.subdomain
阅读获取类别分类体系、识别规则和示例。对于每个候选问题,给出以下决策之一:
references/archive-criteria.md| 决策 | 含义 |
|---|---|
| 匹配文档中的某个类别;在原因中包含类别名称。 |
| 可能是我们代码中的真实bug,或证据不足;请勿归档。 |
| 看起来是噪声但无法明确匹配类别,或出现量异常高;标记为需要用户审核。 |
评估时,按以下顺序权重这些信号:
- 顶部非Sentry-SDK栈帧:如果顶部应用内栈帧位于、
node_modules/、第三方主机或chrome-extension://中,这是强烈的归档信号。<unknown> - 标题模式:许多可归档问题仅从标题即可识别(参见标准参考)。
- 出现量不构成否决:某些高出现量问题(10k+事件、数千用户)如果顶部栈帧是第三方的,仍值得归档。出现量本身也不会强制归档。
- 时效性:超过30天无复发的单事件问题通常是噪声。
- 客户组织分布:如果事件仅来自一个客户子域名(检查标签),则很可能是客户环境噪声。
customerDomain.subdomain
3. Build the plan
3. 制定计划
Output one Markdown table to the user, in this exact shape:
undefined向用户输出一个Markdown表格,格式必须如下:
undefinedTriage plan — sentry/javascript (<N> candidates)
Triage plan — sentry/javascript (<N> candidates)
| # | Issue | Title | Volume | Decision | Category | Reason |
|---|---|---|---|---|---|---|
| 1 | JAVASCRIPT-XXXX | TypeError: ... | 12e/3u | archive | browser-api-noise | Browser clipboard permission denied; not actionable. |
| 2 | JAVASCRIPT-YYYY | <unknown> | 4945e/123u | needs-human | — | High volume, no title — please review before archiving. |
| 3 | JAVASCRIPT-ZZZZ | ZodError: ... | 360e/132u | skip | — | Schema validation failure in our code; looks actionable. |
Then summarize counts: `N archive / M skip / K needs-human`. End with:
Reply to archive the N issues marked , to archive a subset, or to take no action.
applyarchiveapply N,M,...cancelundefined| # | Issue | Title | Volume | Decision | Category | Reason |
|---|---|---|---|---|---|---|
| 1 | JAVASCRIPT-XXXX | TypeError: ... | 12e/3u | archive | browser-api-noise | Browser clipboard permission denied; not actionable. |
| 2 | JAVASCRIPT-YYYY | <unknown> | 4945e/123u | needs-human | — | High volume, no title — please review before archiving. |
| 3 | JAVASCRIPT-ZZZZ | ZodError: ... | 360e/132u | skip | — | Schema validation failure in our code; looks actionable. |
然后汇总数量:`N archive / M skip / K needs-human`。结尾附上:
Reply to archive the N issues marked , to archive a subset, or to take no action.
applyarchiveapply N,M,...cancelundefined4. Apply on approval
4. 获批准后执行
When the user replies (or ):
applyapply <subset>For each issue in the approved set, call:
update_issue(
organizationSlug='sentry',
issueId=<shortId>,
status='ignored',
ignoreMode='untilEscalating',
reason=<category-tagged reason from the plan>,
)Run these sequentially (not in parallel). If a call fails, log the failure, continue with the remaining issues, and report the failed IDs in step 5.
If the user replies or asks to modify the plan, do NOT call . If they reply with edits ("change row 2 to skip"), rebuild the plan and re-confirm.
cancelupdate_issue当用户回复(或)时:
applyapply <subset>对于批准集中的每个问题,调用:
update_issue(
organizationSlug='sentry',
issueId=<shortId>,
status='ignored',
ignoreMode='untilEscalating',
reason=<category-tagged reason from the plan>,
)按顺序执行(而非并行)。如果调用失败,记录失败信息,继续处理剩余问题,并在步骤5中报告失败的ID。
如果用户回复或要求修改计划,请勿调用。如果他们回复修改请求(如"将第2行改为skip"),重新制定计划并再次确认。
cancelupdate_issue5. Report
5. 报告
After applying, output:
undefined执行完成后,输出:
undefinedTriage report
Triage report
- Archived: N
- Skipped: M
- Needs human review: K
- Failures: F (with issue IDs)
- JAVASCRIPT-XXXX — <reason>
- ...
- Archived: N
- Skipped: M
- Needs human review: K
- Failures: F (with issue IDs)
- JAVASCRIPT-XXXX — <reason>
- ...
Recovery
恢复机制
- If fails on one item, log the failure and continue with the rest. Report failed IDs at the end.
update_issue - If the user notices a wrong archive, the user can unarchive it themselves in Sentry. The skill never reverses its own actions automatically.
- If the user asks "redo the plan with these tweaks" mid-flow, regenerate the plan from scratch — do not assume the previous plan still applies.
- 如果在某个问题上失败,记录失败信息并继续处理其余问题。最后报告失败的ID。
update_issue - 如果用户发现错误归档,可自行在Sentry中取消归档。本skill不会自动撤销自身操作。
- 如果用户在流程中途要求"按这些调整重新制定计划",请从头重新生成计划——不要假设之前的计划仍然适用。
Example reasons (use this voice)
示例原因(使用此语气)
Third-party library noise — echarts tooltip; not actionable in our code.Browser API permission noise — Clipboard writeText denied by user agent.Customer-environment proxy interference — 200 response treated as error (HTML body from corporate proxy).Transient backend 5xx — InternalServerError on /api/0/organizations/.../events-meta/; backend transient.Test/synthetic event — smoke test or security probe, not production traffic.Wrong project — Prisma/Python error mis-routed to frontend project.Single-event fluke — 1 event, 1 user, no recurrence in 30+ days.Browser extension noise — ReferenceError for extension-injected global (DarkReader/WeixinJSBridge).
Third-party library noise — echarts tooltip; not actionable in our code.Browser API permission noise — Clipboard writeText denied by user agent.Customer-environment proxy interference — 200 response treated as error (HTML body from corporate proxy).Transient backend 5xx — InternalServerError on /api/0/organizations/.../events-meta/; backend transient.Test/synthetic event — smoke test or security probe, not production traffic.Wrong project — Prisma/Python error mis-routed to frontend project.Single-event fluke — 1 event, 1 user, no recurrence in 30+ days.Browser extension noise — ReferenceError for extension-injected global (DarkReader/WeixinJSBridge).