[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6AE7AN7BD36XP8A6DEVFVS6":3,"skill-same:01M6AE7AN7BD36XP8A6DEVFVS6":129},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":53,"linkOnly":54,"markdownContent":55,"markdownBody":56,"frontMatter":57,"refName":63,"commitSha":64,"skillDirectory":65,"forksCount":66,"repositoryHtmlUrl":67,"repositoryHomepageUrl":68,"ownerHtmlUrl":69,"ownerBlogUrl":70,"ownerDescription":71,"updatedAt":72,"install":73,"resources":86},"01M6AE7AN7BD36XP8A6DEVFVS6","shopify-review-triage",null,"Use this skill when someone wants public Shopify App Store reviews, low-star reviews, or merchant feedback triaged, prioritized, clustered, or turned into a product or support brief. Trigger for prompts like \"triage these app store reviews\", \"what should we fix first from this feedback\", \"cluster our 1-star reviews\", or \"write a weekly low-star review brief\", for a single Shopify app or a portfolio plus watched competitors. Produces a P0-P3 brief covering incident risk, repeated friction, pricing confusion, feature requests, and an explicit needs-human-read bucket, where every item keeps its public source link and stays labeled first pass or human-checked. Do not trigger for support tickets, order data, or any other private merchant data, and never use it to reply to or contact a reviewer.","github\u002Fawesome-copilot","github","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F9919?v=4","01M6AC83DS133TPXFSP1DHNCC6","GitHub","01M6AD3PBDYPK7NVFJNJ66Y8RS",41046,"MIT","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fshopify-review-triage\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,9],"triage","review","shopify review triage","shopify","review triage","io","fix","never","incident","app","access","guides","reviews","weekly","api keys","app store","when","reviewer","api","data","network","brief","https","product","reasoning","packages","feature requests","pricing","support","2026-11-10 10:12:30",false,"---\nname: shopify-review-triage\ndescription: 'Use this skill when someone wants public Shopify App Store reviews, low-star reviews, or merchant feedback triaged, prioritized, clustered, or turned into a product or support brief. Trigger for prompts like \"triage these app store reviews\", \"what should we fix first from this feedback\", \"cluster our 1-star reviews\", or \"write a weekly low-star review brief\", for a single Shopify app or a portfolio plus watched competitors. Produces a P0-P3 brief covering incident risk, repeated friction, pricing confusion, feature requests, and an explicit needs-human-read bucket, where every item keeps its public source link and stays labeled first pass or human-checked. Do not trigger for support tickets, order data, or any other private merchant data, and never use it to reply to or contact a reviewer.'\nlicense: MIT\ncompatibility: 'Cross-platform. Pure reasoning skill over review rows the user pastes - no network access, scripts, API keys, or system packages. Portable to any client that supports the Agent Skills SKILL.md format.'\nmetadata:\n  version: '1.0'\n  author: 'Shopify App Review Brief - independent, not affiliated with or endorsed by Shopify Inc.'\n  source: https:\u002F\u002Falfredtech2026.github.io\u002Fshopify-app-review-brief\u002Fguides\u002Fshopify-app-review-triage.html\n---\n\n# Shopify review triage - public low-star reviews to a P0-P3 brief\n\n## What this does\n\nTakes rows of **public** Shopify App Store review text and produces one prioritized brief a\nproduct or support owner can act on: what kind of problem each review describes, how badly it\ncan hurt, what to do first, and where the original wording came from.\n\nIt is built for independent Shopify app teams and the agencies that run their support - the\ncase where low-star reviews arrive scattered across several listings plus a few watched\ncompetitors, and the failure mode is treating them all as equally urgent.\n\nThe rubric below is not invented here. It reproduces a publicly published rule set verbatim, so\na manual pass and this skill sort the same row the same way. See [Provenance](#provenance) for\nthe source.\n\n## Hard rules\n\nThese are not style preferences. Breaking one makes the output worse than nothing.\n\n1. **Public review text only.** Never accept, request, or copy support tickets, merchant emails,\n   order data, personal contact details, internal telemetry, or anything else not already public\n   on a listing page. If such data appears in the input, stop, say which rows are affected, and\n   ask for them to be removed before continuing.\n2. **Never invent evidence.** Do not write a review, a rating, a date, an app name, or a source\n   URL that was not supplied. A row with no link gets `source: not captured` - never a guessed one.\n3. **Keyword output is a sort, not a verdict.** Everything produced by the rubric alone is\n   labeled *first pass - not human-checked*. Only a person who read the review and checked it\n   against their own systems may relabel an item *human-checked*.\n4. **Reviews are customer reports, not verified defects.** Write \"the reviewer reports the editor\n   showed a blank screen\", never \"the editor is broken\". The distinction survives into the brief.\n5. **No coverage claims.** The brief covers exactly the rows supplied and says so. Make no claim\n   of exhaustive coverage of a listing, a period, or an app.\n6. **No promises.** No revenue impact, no outcome, no ranking effect, no legal or compliance\n   advice. Suggest actions; do not predict results.\n7. **Draft only - never contact anyone.** Do not send email, post a developer reply, open a\n   support ticket, message a reviewer, or publish anything. Hand the draft back to the team and\n   let a person decide what to send.\n8. **Reviewers are people.** Refer to \"the reviewer\". Do not name, profile, or speculate about them.\n\n## 1. Collect the rows\n\nAsk for one review per line. The full form keeps the source link, which the brief needs:\n\n```text\nrating | app name | review date | public reviews URL | review text\n```\n\nA shorter three-field form is also accepted - treat field 1 as the rating when it is a bare 1-5\n(optionally followed by `star` or `stars`), otherwise as the app name:\n\n```text\nrating | app name | review text\n```\n\nRules for this step:\n\n- Lines starting with `#` are comments. Blank lines are skipped.\n- If a row lacks a source URL, carry `source: not captured` through to the brief. Do not drop\n  the row and do not fabricate a link.\n- Do not go and fetch anything yourself. This skill needs no network access; the person you are\n  helping pastes the public rows they already opened.\n- The trigger this rubric is tuned for is a **new 1-3-star review**. Higher-rated rows still\n  classify correctly (a 5-star review often lands in feature requests or needs-human-read), so\n  keep them if they were supplied, but never present them as low-star signal.\n\n## 2. First pass - apply the rubric\n\nLower-case the review text and normalize curly apostrophes (`’` to `'`) before matching, so a\npasted \"won’t load\" still matches `won't load`. Also match every keyword below with the\napostrophe dropped entirely: merchants routinely type these contractions without one, and the\napostrophe-free spelling must classify exactly the same as the contracted form.\n\nFive buckets. Each row gets exactly **one primary** bucket - the first dimension below, in this\norder, with any matching keyword. Further matches are recorded as **secondary**, never as a\nsecond brief item.\n\n### P0 - Incident risk\n\nThe purchase path, app activation, or merchant data may be at stake right now. Left alone it\ncosts the merchant money and the team installs.\n\n**Suggested action.** Try to reproduce on a test store today. If confirmed, treat it as an\nincident: fix or mitigate first, then reply to the reviewer with what changed.\n\n**Signal keywords.** `won't load`, `won't open`, `won't close`, `can't close`, `cannot close`, `blank screen`, `broken`, `crash`, `stopped working`, `not working`, `doesn't work`, `does not work`, `checkout`, `losing sales`, `lost sales`, `error`\n\n### P1 - Repeated friction\n\nThe product works, but the same struggle keeps showing up across reviews or against an open\nsupport theme. Repetition is the signal, not volume of adjectives.\n\n**Suggested action.** Log it against the matching support theme. If the same complaint repeats\nacross rows, schedule a UX fix ahead of new feature work.\n\n**Signal keywords.** `confusing`, `unclear`, `hard to`, `difficult`, `complicated`, `clunky`, `slow`, `couldn't figure`, `could not figure`, `annoying`, `had to contact support`, `setup took`, `too many steps`\n\n### P2 - Pricing confusion\n\nWhat the merchant expected to pay and what happened diverged. Usually a copy problem in the\nlisting, the plan limits, or the upgrade prompts - not a code problem.\n\n**Suggested action.** Compare what the reviewer expected with the listing's pricing section and\nin-app upgrade prompts; clarify the copy where they diverge.\n\n**Signal keywords.** `pricing`, `price`, `charged`, `charge`, `billing`, `billed`, `expensive`, `free plan`, `trial`, `refund`, `hidden fee`, `hidden cost`, `paywall`\n\n### P3 - Feature request\n\nThe merchant wants something the app does not do, or could not find. Valuable as a log entry,\nrarely urgent on its own.\n\n**Suggested action.** Add it to the feature-request log with a link to the review. If the\ncapability already exists, reply to the reviewer with where to find it.\n\n**Signal keywords.** `wish`, `would be great`, `would love`, `please add`, `feature request`, `missing`, `if only`, `would like`, `no option to`, `needs an option`, `hope you add`, `add support for`\n\n### Needs human read\n\nNo keyword matched. Vague frustration, sarcasm, mixed praise, or a story that needs context.\n\n**Suggested action.** No keyword matched. Read the full review yourself and file it manually -\nthe heuristic makes no guess here.\n\n**Priority.** The rubric labels this bucket `P2` and sorts it last. Treat that label as\nprovisional placement in the queue, not as a severity judgment - nothing has been judged yet.\n\n### Tie-breaks and escalation\n\n1. **Most severe wins.** A row naming both a broken checkout and a billing surprise files under\n   P0 with pricing noted as secondary. Never split one review across two brief items.\n2. **Repetition escalates.** If the same friction or pricing theme appears in three or more\n   reviews within about 60 days, move it up one level and say how many rows drove the change.\n3. **Age discounts.** A review older than a year is background, not evidence of a current\n   problem, unless a recent row corroborates it. Cite it as context, never as the headline.\n4. **Competitor reviews never create a P0 for you.** A competitor's incident is roadmap,\n   positioning, or copy input - it belongs in the competitor watch section.\n5. **When unsure, choose needs human read.** The bucket exists so the rubric never launders\n   uncertainty into a priority label.\n\n## 3. Human pass - verify before you promote anything\n\nThe first pass is where this skill stops being able to help on its own. Before any item is\npresented as more than a keyword match, a person on the team has to:\n\n- read the full original review at its source link;\n- for P0 candidates, attempt to reproduce on a development store and check the error tracker and\n  support inbox for matching signals from the same period;\n- record the outcome as *reproduced*, *not reproduced*, or *attempted - notes attached*.\n\nAsk for these outcomes rather than assuming them. Until you have them, every item stays labeled\n*first pass - not human-checked*, including in the summary line. An unverified P0 is a candidate,\nnot an incident.\n\nKnown limits to state plainly when they apply: keyword matching is English-only, misses sarcasm\nand context, can misfile a review that mentions \"checkout\" in passing, and sees only the rows\nsupplied.\n\n## 4. Write the brief\n\nOne document per portfolio, sections in rubric order, every item carrying an owner, a next\naction, and a source link. An item without an owner is a note, not a brief entry.\n\n```markdown\n# Low-star review brief - {portfolio or team name} - week of {YYYY-MM-DD}\n\nScope: {apps monitored} - {competitors watched} - {N} rows supplied, {date range}.\nCovers only the rows supplied - no claim of exhaustive coverage.\nReviews are customer reports, not verified defects. Items marked \"first pass\" are\nunverified keyword matches; \"human-checked\" means a person read the review and checked it.\n\n## P0 - Incident risk\n- **{App} - {signal in a few words}** ({rating} stars, {review date}, [source]({public reviews URL}))\n  - Reviewer reports: {one sentence, in their words where possible}\n  - Status: first pass - not human-checked \u002F human-checked\n  - Reproduced: {yes \u002F no \u002F attempted - notes}\n  - Next action: {action} - owner {name}, due {date}\n\n## P1 - Repeated friction\n- **{App} - {theme}** ({rating} stars, {date}, [source]({public reviews URL}); also seen: {where})\n  - Status: first pass - not human-checked \u002F human-checked\n  - Next action: {UX or docs change} - owner {name}, due {date}\n\n## P2 - Pricing confusion\n- **{App} - {signal}** ({rating} stars, {date}, [source]({public reviews URL}))\n  - Expected vs. actual: {one line}\n  - Status: first pass - not human-checked \u002F human-checked\n  - Next action: {copy or prompt change} - owner {name}, due {date}\n\n## P3 - Feature requests\n- **{App} - {request}** ({rating} stars, {date}, [source]({public reviews URL})) - {log it, or already exists so reply with where to find it}\n\n## Needs human read\n- **{App}** ({rating} stars, {date}, [source]({public reviews URL})) - {no keyword matched; what a human should look for}\n\n## Competitor watch\n- **{Competitor} - {signal}**: {what it implies for our roadmap, copy, or positioning}\n\n## Decisions this week\n- {one decision or experiment, with the rows that motivated it}\n```\n\nOpen the summary line with the counts, e.g. *\"Triaged 8 rows supplied: 3 incident risk,\n2 repeated friction, 1 pricing confusion, 1 feature request, 1 needs human read - first pass,\nnot human-checked.\"*\n\n## 5. Self-check before you hand it over\n\nRefuse to deliver until every line is true:\n\n- [ ] Every item names its bucket and priority from the rubric above, and nothing else.\n- [ ] Every item carries a source link or an explicit `source: not captured`.\n- [ ] No review text, rating, date, app name, or URL appears that was not supplied.\n- [ ] Every unverified item says *first pass - not human-checked*; nothing claims a human check\n      that did not happen.\n- [ ] Claims are phrased as reports (\"the reviewer reports...\"), not as findings about the code.\n- [ ] The scope line says how many rows were supplied and makes no coverage claim.\n- [ ] No promise about revenue, ratings, outcomes, or compliance appears anywhere.\n- [ ] No private data survived into the output.\n- [ ] Nothing was sent, posted, or published - the brief is a draft for the team.\n\n## Worked example\n\nThese eight fictional rows exercise every bucket. Two of them are deliberately 4-star and\n5-star, to reach the feature-request and needs-human-read buckets.\n\n```text\n1 | Example Popup App | The editor shows a blank screen and the popup won't load. We are losing sales every day.\n2 | Example Popup App | The overlay can't close on mobile and it blocks the checkout button.\n1 | Example Currency App | Conversion is broken at checkout and we were still billed for the month.\n3 | Example Currency App | Setup took hours and the settings screen is confusing. Support was slow to reply.\n3 | Example Reviews App | The widget looks fine but the template editor is confusing and hard to use on a tablet.\n2 | Example Currency App | We kept getting charged after uninstalling, and the pricing page never mentioned this.\n4 | Example Reviews App | Great app, but I wish it could export reviews to CSV. Please add filtering by country.\n5 | Example Reviews App | Does what it promises and support replied the same day.\n```\n\nFirst pass over those rows:\n\n```text\nrow 1 -> P0 incident risk\nrow 2 -> P0 incident risk\nrow 3 -> P0 incident risk (secondary: pricing confusion)\nrow 4 -> P1 repeated friction\nrow 5 -> P1 repeated friction\nrow 6 -> P2 pricing confusion\nrow 7 -> P3 feature request\nrow 8 -> needs human read\n```\n\nRows 4 and 5 both matched `confusing`, so they are flagged as a repeated theme - two rows, which\nis a cluster to watch, not yet the three that trigger escalation. Row 3 is a single P0 item with\npricing recorded as secondary, never two items. Row 8 matched nothing and stays unjudged. None of\nthese rows carried a source URL, so each item would read `source: not captured` until the team\nsupplies the listing links.\n\n## Gotchas\n\n- **The Shopify App Store has no stable per-review permalink.** Cite the listing's public reviews\n  page, keep the rating filter if one was used (`...\u002Freviews?ratings%5B%5D=1`), and pin the item\n  with the review date plus the reviewer's first few words so a human can find it again.\n- **Prefer the five-field input form.** It carries the review date and the source URL the brief\n  needs. A three-field parser folds everything after the second `|` into the review text, so a\n  row carrying a date and a URL still classifies but displays them inside the quoted review.\n- **`checkout` is the noisiest keyword in the set.** It fires on \"we love the checkout upsell\".\n  A P0 whose only evidence is the word `checkout` is a needs-human-read row wearing a P0 badge -\n  say so instead of promoting it.\n- **`missing` and `error` cross buckets.** \"missing a dark mode\" is P3; \"settings page errors out\"\n  is P0. Primary-bucket order resolves the collision mechanically; the human pass fixes the ones\n  where it guessed wrong.\n- **Non-English reviews will not match at all.** They land in needs human read. That is the\n  correct outcome - do not translate and then classify as if the keyword had matched.\n- **A competitor's P0 is not yours.** It goes to competitor watch even when the wording is worse\n  than anything on the team's own listings.\n- **One review, one item.** Secondary matches are annotations. Splitting a review across sections\n  double-counts the same merchant and inflates every count in the summary line.\n\n## Provenance\n\nThe dimensions, priorities, keyword lists, suggested actions, tie-break rules, and brief template\nreproduced above come from a publicly published manual triage guide:\n\u003Chttps:\u002F\u002Falfredtech2026.github.io\u002Fshopify-app-review-brief\u002Fguides\u002Fshopify-app-review-triage.html>\n\nThat guide is maintained independently and is not affiliated with, endorsed by, or sponsored by\nShopify Inc. or any app developer. Shopify is a trademark of Shopify Inc.\n","# Shopify review triage - public low-star reviews to a P0-P3 brief\n\n## What this does\n\nTakes rows of **public** Shopify App Store review text and produces one prioritized brief a\nproduct or support owner can act on: what kind of problem each review describes, how badly it\ncan hurt, what to do first, and where the original wording came from.\n\nIt is built for independent Shopify app teams and the agencies that run their support - the\ncase where low-star reviews arrive scattered across several listings plus a few watched\ncompetitors, and the failure mode is treating them all as equally urgent.\n\nThe rubric below is not invented here. It reproduces a publicly published rule set verbatim, so\na manual pass and this skill sort the same row the same way. See [Provenance](#provenance) for\nthe source.\n\n## Hard rules\n\nThese are not style preferences. Breaking one makes the output worse than nothing.\n\n1. **Public review text only.** Never accept, request, or copy support tickets, merchant emails,\n   order data, personal contact details, internal telemetry, or anything else not already public\n   on a listing page. If such data appears in the input, stop, say which rows are affected, and\n   ask for them to be removed before continuing.\n2. **Never invent evidence.** Do not write a review, a rating, a date, an app name, or a source\n   URL that was not supplied. A row with no link gets `source: not captured` - never a guessed one.\n3. **Keyword output is a sort, not a verdict.** Everything produced by the rubric alone is\n   labeled *first pass - not human-checked*. Only a person who read the review and checked it\n   against their own systems may relabel an item *human-checked*.\n4. **Reviews are customer reports, not verified defects.** Write \"the reviewer reports the editor\n   showed a blank screen\", never \"the editor is broken\". The distinction survives into the brief.\n5. **No coverage claims.** The brief covers exactly the rows supplied and says so. Make no claim\n   of exhaustive coverage of a listing, a period, or an app.\n6. **No promises.** No revenue impact, no outcome, no ranking effect, no legal or compliance\n   advice. Suggest actions; do not predict results.\n7. **Draft only - never contact anyone.** Do not send email, post a developer reply, open a\n   support ticket, message a reviewer, or publish anything. Hand the draft back to the team and\n   let a person decide what to send.\n8. **Reviewers are people.** Refer to \"the reviewer\". Do not name, profile, or speculate about them.\n\n## 1. Collect the rows\n\nAsk for one review per line. The full form keeps the source link, which the brief needs:\n\n```text\nrating | app name | review date | public reviews URL | review text\n```\n\nA shorter three-field form is also accepted - treat field 1 as the rating when it is a bare 1-5\n(optionally followed by `star` or `stars`), otherwise as the app name:\n\n```text\nrating | app name | review text\n```\n\nRules for this step:\n\n- Lines starting with `#` are comments. Blank lines are skipped.\n- If a row lacks a source URL, carry `source: not captured` through to the brief. Do not drop\n  the row and do not fabricate a link.\n- Do not go and fetch anything yourself. This skill needs no network access; the person you are\n  helping pastes the public rows they already opened.\n- The trigger this rubric is tuned for is a **new 1-3-star review**. Higher-rated rows still\n  classify correctly (a 5-star review often lands in feature requests or needs-human-read), so\n  keep them if they were supplied, but never present them as low-star signal.\n\n## 2. First pass - apply the rubric\n\nLower-case the review text and normalize curly apostrophes (`’` to `'`) before matching, so a\npasted \"won’t load\" still matches `won't load`. Also match every keyword below with the\napostrophe dropped entirely: merchants routinely type these contractions without one, and the\napostrophe-free spelling must classify exactly the same as the contracted form.\n\nFive buckets. Each row gets exactly **one primary** bucket - the first dimension below, in this\norder, with any matching keyword. Further matches are recorded as **secondary**, never as a\nsecond brief item.\n\n### P0 - Incident risk\n\nThe purchase path, app activation, or merchant data may be at stake right now. Left alone it\ncosts the merchant money and the team installs.\n\n**Suggested action.** Try to reproduce on a test store today. If confirmed, treat it as an\nincident: fix or mitigate first, then reply to the reviewer with what changed.\n\n**Signal keywords.** `won't load`, `won't open`, `won't close`, `can't close`, `cannot close`, `blank screen`, `broken`, `crash`, `stopped working`, `not working`, `doesn't work`, `does not work`, `checkout`, `losing sales`, `lost sales`, `error`\n\n### P1 - Repeated friction\n\nThe product works, but the same struggle keeps showing up across reviews or against an open\nsupport theme. Repetition is the signal, not volume of adjectives.\n\n**Suggested action.** Log it against the matching support theme. If the same complaint repeats\nacross rows, schedule a UX fix ahead of new feature work.\n\n**Signal keywords.** `confusing`, `unclear`, `hard to`, `difficult`, `complicated`, `clunky`, `slow`, `couldn't figure`, `could not figure`, `annoying`, `had to contact support`, `setup took`, `too many steps`\n\n### P2 - Pricing confusion\n\nWhat the merchant expected to pay and what happened diverged. Usually a copy problem in the\nlisting, the plan limits, or the upgrade prompts - not a code problem.\n\n**Suggested action.** Compare what the reviewer expected with the listing's pricing section and\nin-app upgrade prompts; clarify the copy where they diverge.\n\n**Signal keywords.** `pricing`, `price`, `charged`, `charge`, `billing`, `billed`, `expensive`, `free plan`, `trial`, `refund`, `hidden fee`, `hidden cost`, `paywall`\n\n### P3 - Feature request\n\nThe merchant wants something the app does not do, or could not find. Valuable as a log entry,\nrarely urgent on its own.\n\n**Suggested action.** Add it to the feature-request log with a link to the review. If the\ncapability already exists, reply to the reviewer with where to find it.\n\n**Signal keywords.** `wish`, `would be great`, `would love`, `please add`, `feature request`, `missing`, `if only`, `would like`, `no option to`, `needs an option`, `hope you add`, `add support for`\n\n### Needs human read\n\nNo keyword matched. Vague frustration, sarcasm, mixed praise, or a story that needs context.\n\n**Suggested action.** No keyword matched. Read the full review yourself and file it manually -\nthe heuristic makes no guess here.\n\n**Priority.** The rubric labels this bucket `P2` and sorts it last. Treat that label as\nprovisional placement in the queue, not as a severity judgment - nothing has been judged yet.\n\n### Tie-breaks and escalation\n\n1. **Most severe wins.** A row naming both a broken checkout and a billing surprise files under\n   P0 with pricing noted as secondary. Never split one review across two brief items.\n2. **Repetition escalates.** If the same friction or pricing theme appears in three or more\n   reviews within about 60 days, move it up one level and say how many rows drove the change.\n3. **Age discounts.** A review older than a year is background, not evidence of a current\n   problem, unless a recent row corroborates it. Cite it as context, never as the headline.\n4. **Competitor reviews never create a P0 for you.** A competitor's incident is roadmap,\n   positioning, or copy input - it belongs in the competitor watch section.\n5. **When unsure, choose needs human read.** The bucket exists so the rubric never launders\n   uncertainty into a priority label.\n\n## 3. Human pass - verify before you promote anything\n\nThe first pass is where this skill stops being able to help on its own. Before any item is\npresented as more than a keyword match, a person on the team has to:\n\n- read the full original review at its source link;\n- for P0 candidates, attempt to reproduce on a development store and check the error tracker and\n  support inbox for matching signals from the same period;\n- record the outcome as *reproduced*, *not reproduced*, or *attempted - notes attached*.\n\nAsk for these outcomes rather than assuming them. Until you have them, every item stays labeled\n*first pass - not human-checked*, including in the summary line. An unverified P0 is a candidate,\nnot an incident.\n\nKnown limits to state plainly when they apply: keyword matching is English-only, misses sarcasm\nand context, can misfile a review that mentions \"checkout\" in passing, and sees only the rows\nsupplied.\n\n## 4. Write the brief\n\nOne document per portfolio, sections in rubric order, every item carrying an owner, a next\naction, and a source link. An item without an owner is a note, not a brief entry.\n\n```markdown\n# Low-star review brief - {portfolio or team name} - week of {YYYY-MM-DD}\n\nScope: {apps monitored} - {competitors watched} - {N} rows supplied, {date range}.\nCovers only the rows supplied - no claim of exhaustive coverage.\nReviews are customer reports, not verified defects. Items marked \"first pass\" are\nunverified keyword matches; \"human-checked\" means a person read the review and checked it.\n\n## P0 - Incident risk\n- **{App} - {signal in a few words}** ({rating} stars, {review date}, [source]({public reviews URL}))\n  - Reviewer reports: {one sentence, in their words where possible}\n  - Status: first pass - not human-checked \u002F human-checked\n  - Reproduced: {yes \u002F no \u002F attempted - notes}\n  - Next action: {action} - owner {name}, due {date}\n\n## P1 - Repeated friction\n- **{App} - {theme}** ({rating} stars, {date}, [source]({public reviews URL}); also seen: {where})\n  - Status: first pass - not human-checked \u002F human-checked\n  - Next action: {UX or docs change} - owner {name}, due {date}\n\n## P2 - Pricing confusion\n- **{App} - {signal}** ({rating} stars, {date}, [source]({public reviews URL}))\n  - Expected vs. actual: {one line}\n  - Status: first pass - not human-checked \u002F human-checked\n  - Next action: {copy or prompt change} - owner {name}, due {date}\n\n## P3 - Feature requests\n- **{App} - {request}** ({rating} stars, {date}, [source]({public reviews URL})) - {log it, or already exists so reply with where to find it}\n\n## Needs human read\n- **{App}** ({rating} stars, {date}, [source]({public reviews URL})) - {no keyword matched; what a human should look for}\n\n## Competitor watch\n- **{Competitor} - {signal}**: {what it implies for our roadmap, copy, or positioning}\n\n## Decisions this week\n- {one decision or experiment, with the rows that motivated it}\n```\n\nOpen the summary line with the counts, e.g. *\"Triaged 8 rows supplied: 3 incident risk,\n2 repeated friction, 1 pricing confusion, 1 feature request, 1 needs human read - first pass,\nnot human-checked.\"*\n\n## 5. Self-check before you hand it over\n\nRefuse to deliver until every line is true:\n\n- [ ] Every item names its bucket and priority from the rubric above, and nothing else.\n- [ ] Every item carries a source link or an explicit `source: not captured`.\n- [ ] No review text, rating, date, app name, or URL appears that was not supplied.\n- [ ] Every unverified item says *first pass - not human-checked*; nothing claims a human check\n      that did not happen.\n- [ ] Claims are phrased as reports (\"the reviewer reports...\"), not as findings about the code.\n- [ ] The scope line says how many rows were supplied and makes no coverage claim.\n- [ ] No promise about revenue, ratings, outcomes, or compliance appears anywhere.\n- [ ] No private data survived into the output.\n- [ ] Nothing was sent, posted, or published - the brief is a draft for the team.\n\n## Worked example\n\nThese eight fictional rows exercise every bucket. Two of them are deliberately 4-star and\n5-star, to reach the feature-request and needs-human-read buckets.\n\n```text\n1 | Example Popup App | The editor shows a blank screen and the popup won't load. We are losing sales every day.\n2 | Example Popup App | The overlay can't close on mobile and it blocks the checkout button.\n1 | Example Currency App | Conversion is broken at checkout and we were still billed for the month.\n3 | Example Currency App | Setup took hours and the settings screen is confusing. Support was slow to reply.\n3 | Example Reviews App | The widget looks fine but the template editor is confusing and hard to use on a tablet.\n2 | Example Currency App | We kept getting charged after uninstalling, and the pricing page never mentioned this.\n4 | Example Reviews App | Great app, but I wish it could export reviews to CSV. Please add filtering by country.\n5 | Example Reviews App | Does what it promises and support replied the same day.\n```\n\nFirst pass over those rows:\n\n```text\nrow 1 -> P0 incident risk\nrow 2 -> P0 incident risk\nrow 3 -> P0 incident risk (secondary: pricing confusion)\nrow 4 -> P1 repeated friction\nrow 5 -> P1 repeated friction\nrow 6 -> P2 pricing confusion\nrow 7 -> P3 feature request\nrow 8 -> needs human read\n```\n\nRows 4 and 5 both matched `confusing`, so they are flagged as a repeated theme - two rows, which\nis a cluster to watch, not yet the three that trigger escalation. Row 3 is a single P0 item with\npricing recorded as secondary, never two items. Row 8 matched nothing and stays unjudged. None of\nthese rows carried a source URL, so each item would read `source: not captured` until the team\nsupplies the listing links.\n\n## Gotchas\n\n- **The Shopify App Store has no stable per-review permalink.** Cite the listing's public reviews\n  page, keep the rating filter if one was used (`...\u002Freviews?ratings%5B%5D=1`), and pin the item\n  with the review date plus the reviewer's first few words so a human can find it again.\n- **Prefer the five-field input form.** It carries the review date and the source URL the brief\n  needs. A three-field parser folds everything after the second `|` into the review text, so a\n  row carrying a date and a URL still classifies but displays them inside the quoted review.\n- **`checkout` is the noisiest keyword in the set.** It fires on \"we love the checkout upsell\".\n  A P0 whose only evidence is the word `checkout` is a needs-human-read row wearing a P0 badge -\n  say so instead of promoting it.\n- **`missing` and `error` cross buckets.** \"missing a dark mode\" is P3; \"settings page errors out\"\n  is P0. Primary-bucket order resolves the collision mechanically; the human pass fixes the ones\n  where it guessed wrong.\n- **Non-English reviews will not match at all.** They land in needs human read. That is the\n  correct outcome - do not translate and then classify as if the keyword had matched.\n- **A competitor's P0 is not yours.** It goes to competitor watch even when the wording is worse\n  than anything on the team's own listings.\n- **One review, one item.** Secondary matches are annotations. Splitting a review across sections\n  double-counts the same merchant and inflates every count in the summary line.\n\n## Provenance\n\nThe dimensions, priorities, keyword lists, suggested actions, tie-break rules, and brief template\nreproduced above come from a publicly published manual triage guide:\n\u003Chttps:\u002F\u002Falfredtech2026.github.io\u002Fshopify-app-review-brief\u002Fguides\u002Fshopify-app-review-triage.html>\n\nThat guide is maintained independently and is not affiliated with, endorsed by, or sponsored by\nShopify Inc. or any app developer. Shopify is a trademark of Shopify Inc.\n",{"name":5,"license":15,"metadata":58,"description":7,"compatibility":62},{"author":59,"source":60,"version":61},"Shopify App Review Brief - independent, not affiliated with or endorsed by Shopify Inc.","https:\u002F\u002Falfredtech2026.github.io\u002Fshopify-app-review-brief\u002Fguides\u002Fshopify-app-review-triage.html","1.0","Cross-platform. Pure reasoning skill over review rows the user pastes - no network access, scripts, API keys, or system packages. Portable to any client that supports the Agent Skills SKILL.md format.","main","5269f7ea2d6c3a9bfda5ed878b6726cf509121fd","skills\u002Fshopify-review-triage",5340,"https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot","https:\u002F\u002Fawesome-copilot.github.com\u002F","https:\u002F\u002Fgithub.com\u002Fgithub","https:\u002F\u002Fgithub.com\u002Fabout","How people build software.","2026-11-11 13:41:32",{"source":8,"skillName":5,"commands":74,"prompt":84,"zipAvailable":85},[75,78,81],{"tool":76,"command":77},"npx","npx skills add github\u002Fawesome-copilot --skill shopify-review-triage",{"tool":79,"command":80},"bunx","bunx skills add github\u002Fawesome-copilot --skill shopify-review-triage",{"tool":82,"command":83},"pnpm","pnpm dlx skills add github\u002Fawesome-copilot --skill shopify-review-triage","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fshopify-review-triage\u002FSKILL.md",true,[87,93,97,101,105,109,113,117,121,125],{"path":88,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":91,"sourceHtmlUrl":92},"references\u002FCODE-MODE.md","REFERENCE","参考文档",20211,"https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai\u002Fblob\u002Fmain\u002Fsrc\u002Fpydantic_ai_harness\u002Fpydantic_ai_harness\u002F.agents\u002Fskills\u002Fpydantic-ai-harness\u002Freferences\u002FCODE-MODE.md",{"path":94,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":95,"sourceHtmlUrl":96},"references\u002FCODING-AND-WORKSPACES.md",41011,"https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai\u002Fblob\u002Fmain\u002Fsrc\u002Fpydantic_ai_harness\u002Fpydantic_ai_harness\u002F.agents\u002Fskills\u002Fpydantic-ai-harness\u002Freferences\u002FCODING-AND-WORKSPACES.md",{"path":98,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":99,"sourceHtmlUrl":100},"references\u002FCONTEXT-MANAGEMENT.md",23088,"https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai\u002Fblob\u002Fmain\u002Fsrc\u002Fpydantic_ai_harness\u002Fpydantic_ai_harness\u002F.agents\u002Fskills\u002Fpydantic-ai-harness\u002Freferences\u002FCONTEXT-MANAGEMENT.md",{"path":102,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":103,"sourceHtmlUrl":104},"references\u002FCONTROL-AND-SAFETY.md",42547,"https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai\u002Fblob\u002Fmain\u002Fsrc\u002Fpydantic_ai_harness\u002Fpydantic_ai_harness\u002F.agents\u002Fskills\u002Fpydantic-ai-harness\u002Freferences\u002FCONTROL-AND-SAFETY.md",{"path":106,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":107,"sourceHtmlUrl":108},"references\u002FDELEGATION-AND-PLANNING.md",23150,"https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai\u002Fblob\u002Fmain\u002Fsrc\u002Fpydantic_ai_harness\u002Fpydantic_ai_harness\u002F.agents\u002Fskills\u002Fpydantic-ai-harness\u002Freferences\u002FDELEGATION-AND-PLANNING.md",{"path":110,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":111,"sourceHtmlUrl":112},"references\u002FHOSTED-INTEGRATIONS.md",15132,"https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai\u002Fblob\u002Fmain\u002Fsrc\u002Fpydantic_ai_harness\u002Fpydantic_ai_harness\u002F.agents\u002Fskills\u002Fpydantic-ai-harness\u002Freferences\u002FHOSTED-INTEGRATIONS.md",{"path":114,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":115,"sourceHtmlUrl":116},"references\u002FKNOWLEDGE-AND-MEMORY.md",18729,"https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai\u002Fblob\u002Fmain\u002Fsrc\u002Fpydantic_ai_harness\u002Fpydantic_ai_harness\u002F.agents\u002Fskills\u002Fpydantic-ai-harness\u002Freferences\u002FKNOWLEDGE-AND-MEMORY.md",{"path":118,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":119,"sourceHtmlUrl":120},"references\u002FRESEARCH-AND-BROWSING.md",21069,"https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai\u002Fblob\u002Fmain\u002Fsrc\u002Fpydantic_ai_harness\u002Fpydantic_ai_harness\u002F.agents\u002Fskills\u002Fpydantic-ai-harness\u002Freferences\u002FRESEARCH-AND-BROWSING.md",{"path":122,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":123,"sourceHtmlUrl":124},"references\u002FRUNTIME-AND-EXTENSION.md",34387,"https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai\u002Fblob\u002Fmain\u002Fsrc\u002Fpydantic_ai_harness\u002Fpydantic_ai_harness\u002F.agents\u002Fskills\u002Fpydantic-ai-harness\u002Freferences\u002FRUNTIME-AND-EXTENSION.md",{"path":126,"resourceType":89,"resourceTypeDesc":90,"sizeBytes":127,"sourceHtmlUrl":128},"references\u002FTESTING-AND-DEBUGGING.md",17696,"https:\u002F\u002Fgithub.com\u002Fpydantic\u002Fpydantic-ai\u002Fblob\u002Fmain\u002Fsrc\u002Fpydantic_ai_harness\u002Fpydantic_ai_harness\u002F.agents\u002Fskills\u002Fpydantic-ai-harness\u002Freferences\u002FTESTING-AND-DEBUGGING.md",[130,159,187,217,249,265],{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":140,"publishedAt":53},"01M70KXZNX9ES38N2A8M58ZZMZ","supabase-rls-policies","Write, review, and test Supabase Row Level Security (RLS) policies so that one user cannot read or change another user's rows. Use when creating or changing tables, policies, views, or security definer functions in a Supabase project, when reviewing a migration that touches RLS, or when asked to prove user isolation with pgTAP tests that sign in as two users.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fsupabase-rls-policies\u002FSKILL.md",[136,139],{"categoryNo":137,"categoryName":138,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[141,142,143,144,145,40,25,146,147,148,149,150,151,152,153,154,155,156,157,158],"supabase","rls","supabase rls","supabase rls policies","project","change","read","write","security","isolation","tables","as","tests","prove","use","users","functions","with",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":163,"categories":164,"keywords":166,"publishedAt":53},"01M70KWA5YWXDV6V8DZ19E3T2Y","skill-distribution-audit","Audit a skill collection before release or investigate installer omissions, archived\u002Ftemplate leakage, duplicate identities, and manifest drift. Reconcile the intended public source set, distribution manifest, and actual discovery output for a specified consumer version. Includes a deterministic set-comparison helper.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fskill-distribution-audit\u002FSKILL.md",[165],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186],"distribution","skill distribution audit","audit","SET","deterministic","installer","for","discovery","comparison","helper","manifest","version","collection","drift","output","investigate","duplicate","template","release","reconcile",{"skillNo":188,"name":189,"nameZh":6,"description":190,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":191,"sourceHtmlUrl":192,"categories":193,"keywords":199,"publishedAt":53},"01M70KCJPFVW7PPQ49CC5R8JGK","logicapps-custom-code-net10-migration","Migrate Azure Logic Apps Standard local-function custom-code projects from .NET 8 to .NET 10. Use for legacy Logic Apps custom-code workspace upgrades, project\u002Fpackage configuration, custom-worker settings, publication, and integrated VS Code debugging. Not for ordinary .NET applications, standalone Azure Functions, Consumption workflows, or cloud deployment.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Flogicapps-custom-code-net10-migration\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Flogicapps-custom-code-net10-migration\u002FSKILL.md",[194],{"categoryNo":195,"categoryName":196,"taxonomyType":197,"taxonomyTypeDesc":198},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[200,201,202,203,204,205,173,145,206,207,208,209,210,211,212,155,213,214,215,216],"custom","code","logicapps custom code net10 migration","migration","projects","standalone","deployment","applications","local","azure","worker","upgrades","package","apps","Legacy","debugging","workflows",{"skillNo":218,"name":219,"nameZh":6,"description":220,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":221,"sourceHtmlUrl":222,"categories":223,"keywords":228,"publishedAt":53},"01M6AEBN37RQMXJ3298PEY7PG1","winmd-api-search","Find and explore Windows desktop APIs. Use when building features that need platform capabilities — camera, file access, notifications, UI controls, AI\u002FML, sensors, networking, etc. Discovers the right API for a task and retrieves full type details (methods, properties, events, enumeration values).","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fwinmd-api-search\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fwinmd-api-search\u002FSKILL.md",[224,227],{"categoryNo":225,"categoryName":226,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":195,"categoryName":196,"taxonomyType":197,"taxonomyTypeDesc":198},[229,230,42,231,232,233,234,235,236,237,238,239,240,241,34,40,242,243,244,245,246,173,247,248],"winmd api search","search","windows","desktop","file access","enumeration","ui","ml","file","networking","capabilities","notifications","explore","features","full","camera","events","platform","methods","controls",{"skillNo":250,"name":251,"nameZh":6,"description":252,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":253,"licenseFileUrl":254,"sourceHtmlUrl":255,"categories":256,"keywords":262,"publishedAt":53},"01M6AE571R3SC1ZGE202B3NB5S","resemble-detect","Deepfake detection and media safety — detect AI-generated audio, images, video, and text, trace synthesis sources, apply watermarks, verify speaker identity, and analyze media intelligence using Resemble AI","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fresemble-detect\u002FLICENSE","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fresemble-detect\u002FSKILL.md",[257,258,261],{"categoryNo":225,"categoryName":226,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":259,"categoryName":260,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[263,170,237,46,264],"resemble detect","identity",{"skillNo":266,"name":267,"nameZh":6,"description":268,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":253,"licenseFileUrl":269,"sourceHtmlUrl":270,"categories":271,"keywords":276,"publishedAt":53},"01M6AE30BSK2HCY4TQQ22Z8JRD","quality-playbook","Run a complete quality engineering audit on any codebase. Derives behavioral requirements from the code, generates spec-traced functional tests, runs a three-pass code review with regression tests, executes a multi-model spec audit (Council of Three), and produces a consolidated bug report with TDD-verified patches. Finds the 35% of real defects that structural code review alone cannot catch. Works with any language. Trigger on 'quality playbook', 'spec audit', 'Council of Three', 'fitness-to-purpose', or 'coverage theater'.","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fquality-playbook\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fgithub\u002Fawesome-copilot\u002Fblob\u002Fmain\u002Fskills\u002Fquality-playbook\u002FSKILL.md",[272,275],{"categoryNo":273,"categoryName":274,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[277,278,279,280,201,25,9,169,281,282,46,283,284,285,286,287,288,289,290,291,292,293,153,294,295,296,297],"playbook","quality playbook","quality","code review","tdd","run","report","spec","bug report","council","engineering","functional","spec audit","bug","verified","multi-model","three","coverage","model","regression","structural"]