# Detect Completed

> Scans open feature requests for a WooCommerce Marketplace product against its changelog and flags requests whose feature has already shipped. Recommends marking them as completed with a reply pointing to the version. Use when asked to find or close fulfilled/shipped feature requests on WooCommerce.com.

- Skill: `woocommerce/detect-completed` (Agent Skill)
- Install (CLI): `npx skillmds@latest add woocommerce/detect-completed`
- Raw SKILL.md: https://api.skillmd.com/api/skills/woocommerce/detect-completed/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: woocommerce (https://skillmd.com/u/woocommerce)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/woocommerce/detect-completed

---


# Detect Completed Feature Requests

You are helping a WooCommerce Marketplace team member identify open feature
requests that have already been fulfilled by a shipped release or documented
capability.

**Read first:**
- `.claude/skills/shared/RULES.md`
- `.claude/skills/shared/DISPLAY.md`
- `.claude/skills/shared/PHASE_LOOP.md`
- `.claude/skills/shared/KNOWLEDGE_BASE.md` — changelog + docs crawl

---

## Step 1 — Resolve the product

Follow `.claude/skills/shared/RESOLVE_PRODUCT.md`. Keep the product slug —
it is needed by the knowledge base step.

---

## Step 2 — Build the knowledge base

> **Skip this step if invoked by the orchestrator.** The orchestrator passes
> `kb_path` to `.triage-state/<id>/knowledge_base.json` — load it from there.

Follow `.claude/skills/shared/KNOWLEDGE_BASE.md` in full. Store the result
in memory (changelog entries, doc capabilities, `latest_version`).

---

## Step 3 — Fetch open feature requests

> **Skip this step if invoked by the orchestrator.** Read FRs from
> `input_path` 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`.

URL carry-through is mandatory — see `RULES.md`.

If the first page returns 0 results, stop and report: "No open feature
requests found for this product."

---

## Step 4 — DETECTION STARTS HERE — Match ALL FRs against the knowledge base

(Orchestrator subagent: begin reading from this step.)

One pass over every FR. For each FR, reason about whether any knowledge base
entry (changelog or docs) describes a shipped or documented feature that
fulfils the FR's core ask.

A match means: a user who submitted this FR would consider their request
addressed. Be conservative — only flag matches you're reasonably confident
about.

Assign confidence per `RULES.md`:
- **High** — the knowledge base directly and fully addresses the FR
- **Low** — partially addressed, or likely addressed but with ambiguity

For each match record:
- FR fields: `id`, `title`, `votes`, `date`, `url`
- Source: changelog version + date, OR docs page URL
- The specific line / feature description that addresses it
- Confidence and a one-sentence reason
- Excerpt: first 1–3 sentences of the FR description, trimmed

**Docs source rule** — see `KNOWLEDGE_BASE.md`. A docs match may only cite a
URL fetched and verified in Step 2 (HTTP 200, content read). Never infer or
construct a docs URL.

Do not present partial results mid-pass. Complete the full pass, then
present all matches.

### 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>",
  "shipped_version": "<vX.Y.Z>" | null,
  "shipped_date": "<YYYY-MM-DD>" | null,
  "source": "changelog" | "docs",
  "docs_url": "<verified URL>" | null,
  "ship_line": "<specific changelog line or doc excerpt>" }
```

---

## Step 5 — Present the report

Follow `DISPLAY.md` pagination. Decode HTML entities. Translate non-English
excerpts per `RULES.md`.

For each match:

```
## Match [N]: "[FR title]"
Confidence: High / Low
Source: changelog · [Product Name] [version] ([release date])
     OR docs · [docs page URL]
Reason: [one sentence — why this FR is fulfilled]

FR:   ID [id] — "[title]" ([votes] votes · [date])
      [url]
      "[description — first 2–3 sentences, trimmed if long]"
Ship: [specific changelog line or doc excerpt that addresses it]
```

End with:
_X open FRs scanned · Y likely completed (Z high confidence, W low confidence)._

If no matches, report that and stop.

---

## Step 6 — Confirmation menu

```
Which matches should I mark as completed?

  [1] "[short FR title]" → [source: version or docs]
  [2] "[short FR title]" → [source: version or docs]
  ...
  [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.
```

Wait for the user's reply.

---

## Step 7 — Preview comments

Plain text only (see `RULES.md`).

Render a preview for every approved match with placeholders filled in:

```
📝 Comment preview — ID [id] — "[title]"

---
[full comment text]
---
```

**Changelog-sourced template:**

```
Hi there,

Thank you for your suggestion!

Great news! This feature was shipped in [product_name] [version] ([release_date])!

Therefore, I am marking this request as completed. Please update to [version] or later to access this feature.
```

**Docs-sourced template** (feature documented but no specific changelog
version):

```
Hi there,

Thank you for your suggestion!

Great news! This feature is already supported by [product_name] (as of version [latest_version]). You can find more details in our documentation: [docs page URL]

Therefore, I am marking this request as completed.
```

> `[docs page URL]` must be a URL verified in Step 2. If none, fall back to
> the changelog template (or omit the match if no version exists).

After all previews: **"Post these comments and mark as completed? (Y / N)"**
If N, abort.

---

## Step 8 — Close approved matches

For each approved match, in this order:

1. **Post a comment** via `wccom-feature-requests-comment`.
2. **Update status** via `wccom-feature-requests-update-status` →
   `"completed"`.
3. **Write failure handling** — if either call fails, do not record as
   actioned. Report in the summary; continue. If the comment posted but
   status update failed, note the half-completed state — manual cleanup
   required.

---

## Step 9 — Confirmation summary

```
Done.

✅ Completed: ID [id] — "[title]"
   Source: [product_name] [version] ([release_date]) OR [docs page URL]
   [url]

⚠️  Failed: ID [id] — "[title]" — [error]
   [url]
```

One line per actioned FR, then: _N marked as completed · F failed._

Then follow `PHASE_LOOP.md`.

