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.

Aller à l'installation

Informations de source

Dépôt
woocommerce/wccom-feature-requests-triage-skills
Dernière activité de la source
21 mai 2026 à 10:54
Langue détectée de SKILL.md
anglais
Étoiles
0
Forks
0

Options d'installation

Le prompt qui vérifie d'abord la source est sélectionné par défaut. Vous pouvez passer à une commande directe ou télécharger une copie locale.

Vérifiez les fichiers source

Lisez SKILL.md et les fichiers associés affichés par SkillsMP avant de décider de l'installer.

Affichage de SKILL.md

SKILL.md
Instructions source · Aperçu en lecture seule
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`.
Voir sur GitHub