Skip to main content

detect-spam

Scans open feature requests for a WooCommerce Marketplace product and flags ones that look like spam (promotional links, gibberish, off-topic, copy-pasted SEO content). Lets the user select which to mark as spam, then silently sets the status to spam — no comment is posted. Use when asked to find or clean up spam feature requests on WooCommerce.com.

Ir para a instalação

Informações da origem

Repositório
woocommerce/wccom-feature-requests-triage-skills
Última atividade na origem
21 de maio de 2026 às 10:54
Idioma detectado do SKILL.md
inglês
Estrelas
0
Forks
0

Opções de instalação

Por padrão, está selecionado o prompt que primeiro revisa a origem. Você pode mudar para um comando direto ou baixar uma cópia local.

Revise os arquivos de origem

Leia o SKILL.md e os arquivos complementares exibidos pelo SkillsMP antes de decidir se vai instalar.

Exibindo SKILL.md

SKILL.md
Instruções da origem · Visualização somente leitura
name
detect-spam
description
Scans open feature requests for a WooCommerce Marketplace product and flags ones that look like spam (promotional links, gibberish, off-topic, copy-pasted SEO content). Lets the user select which to mark as spam, then silently sets the status to spam — no comment is posted. Use when asked to find or clean up spam feature requests on WooCommerce.com.
# Detect Spam Feature Requests You are helping a WooCommerce Marketplace team member identify and silently flag **spam** feature requests for a specific product. Spam is anything that isn't a genuine product suggestion: promotional links, gibberish, off-topic content, scraped/SEO copy-paste, etc. Spam is handled differently from other triage actions: **no comment is posted**. The skill only changes status to `spam`. **Read first:** - `.claude/skills/shared/RULES.md` — ID display, URL carry-through, HTML entity decoding, translation, plain-text comments, confidence labels. - `.claude/skills/shared/DISPLAY.md` — pagination conventions. - `.claude/skills/shared/PHASE_LOOP.md` — end-of-phase loop (standalone vs orchestrated mode). --- ## Step 1 — Resolve the product Follow `.claude/skills/shared/RESOLVE_PRODUCT.md` in full. --- ## Step 2 — Fetch all open feature requests > **Skip this step if invoked by the orchestrator.** The orchestrator passes > `input_path` — read FRs from there as JSONL. Call `wccom-feature-requests-list` with `product_id: <id>`, `status: "publish"`, and `per_page: 100`. Paginate until a page returns fewer than 100 items. Collect `id`, `title`, `description`, `status`, `votes`, `date`, `url` for every request. If the first page returns 0 results, stop and report: "No open feature requests found for this product." --- ## Step 3 — DETECTION STARTS HERE — Identify spam (Orchestrator subagent: begin reading from this step.) A request is likely **spam** if any of these patterns apply: - **Promotional / link-stuffed** — body is mostly URLs, especially to unrelated products, services, or shady domains; affiliate-style copy. - **Off-topic** — about a different product, an unrelated industry, cryptocurrency, weight loss, gambling, adult content, "buy followers", prescription drugs, etc. - **Gibberish / random text** — keyword soup, broken grammar that looks machine-generated or pasted out of context, lorem-ipsum-like filler. - **Scraped / SEO copy-paste** — boilerplate marketing prose with no specific feature ask. - **Exact or near-identical duplicates** — same body text across multiple requests; strong signal of coordinated spam. - **Account / contact info dump** — phone numbers, emails, login credentials, "call us at…" style content. - **Trojan horse pivot** — opens with a generic relatable statement then pivots to promote an unrelated product or link. - **Link syntax probing** — lists of URL format variants (BBCode, markdown, wiki syntax) with no actual feature request content. - **Non-Latin script with no product relevance** — content in a script unrelated to the product's audience that contains no genuine feature ask, especially paired with promotional links. A request is **NOT** spam (leave it alone) if it: - Describes any genuine product feature, no matter how rough or short. - Is a support question (use `/detect-support-requests`). - Is in a non-English language but on-topic — translate, don't flag. Be conservative. False positives mean a real merchant gets silently disappeared. **Only flag where the spam framing is unambiguous.** Assign confidence per `RULES.md` (High / Low). ### Flagged record schema (for orchestrator output JSONL) ``` { "id": <int>, "title": "<str>", "url": "<str>", "reason": "<one sentence>", "confidence": "High" | "Low", "excerpt": "<first 1–3 sentences of description, trimmed>" } ``` --- ## Step 4 — Present the report Follow `DISPLAY.md` pagination. Decode HTML entities. Translate non-English excerpts per `RULES.md`. For each flagged request: ``` ## ID [id] — "[title]" Confidence: High / Low Reason: [one sentence — what makes this look like spam] [votes] vote(s) · opened [date] [url] Excerpt: "[1–2 sentences from the description showing the spam framing — verbatim, trimmed if long]" ``` End with a summary line: _X open requests scanned · Y likely spam (Z high confidence, W low confidence)._ If no requests are flagged, report that and stop. --- ## Step 5 — Confirmation menu ``` Which requests should I mark as spam? [1] "[short title]" (confidence) [2] "[short title]" (confidence) ... [A] All of the above [H] High confidence only ← omit if no High items (see RULES.md) [N] None / skip Reply with numbers (e.g. "1 3"), A for all, H for high confidence only, or N to skip. ⚠️ Marking as spam is silent — no comment will be posted on the request. ``` Wait for the user's reply before taking any action. --- ## Step 6 — Mark approved requests as spam For each approved request: 1. Call `wccom-feature-requests-update-status` with `id` set to the FR's ID and `status: "spam"`. 2. **Fallback** — if the API returns a permission error (403 / "not allowed"), retry with `status: "closed"`. Record the fallback so the summary distinguishes it. 3. **Write failure handling** — if both attempts fail, do **not** record this FR as actioned. Report the failure in the summary and continue to the next FR. **Do not post any comment.** Spam handling is silent by design. --- ## Step 7 — Confirmation summary ``` Done. 🚫 Marked as spam: ID [id] — "[title]" ([votes] vote(s) · opened [date]) [url] ❌ Closed (spam fallback — no spam permission): ID [id] — "[title]" [url] ⚠️ Failed: ID [id] — "[title]" — [error] [url] ⏭️ Left open (not confirmed): ID [id] — "[title]" ``` Omit any section with no entries. End with: _N marked as spam · M closed as fallback · F failed · P left open._ Then follow `PHASE_LOOP.md`.
Ver no GitHub