Use to quality-check an article before it ships — an independent reviewer that scores CORE-EEAT, reconciles every fact against the evidence ledger, and returns a ship / no-ship verdict with a fix list. First-party QA gate for the article factory (P8); needs no external packs. 质检/审核/审稿/CORE-EEAT/EEAT/fact-check/事实核对/quality/质量评分/能不能发/ship判定/发布闸门
Scanned 8/30/2026
Install to Claude Code
npx -y skills add weitzu-com/ai-article-factory --skill article-qa --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Article Qa?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/weitzu-com-article-qa)More formats (shields.io, HTML) on the badges page.
---
name: article-qa
description: 'Use to quality-check an article before it ships — an independent reviewer that scores CORE-EEAT, reconciles every fact against the evidence ledger, and returns a ship / no-ship verdict with a fix list. First-party QA gate for the article factory (P8); needs no external packs. 质检/审核/审稿/CORE-EEAT/EEAT/fact-check/事实核对/quality/质量评分/能不能发/ship判定/发布闸门'
version: "1.0.0"
license: Apache-2.0
homepage: "https://github.com/weitzu-com/ai-article-factory"
when_to_use: "Use at pipeline stage P8 (the hard QA gate), or whenever the user asks 能不能发 / 审一下 / 质检 / fact-check / EEAT score / is this ready to publish. Reviews a finished draft against its evidence ledger and product profile, scores CORE-EEAT, and emits ship / no-ship. On no-ship it bounces the work back to the writing stage (P5)."
argument-hint: "<articles/<slug> | draft path> [evidence-ledger path]"
metadata:
author: weitzu-com
geo-relevance: high
tags: [qa, review, fact-check, core-eeat, eeat, quality, publish-gate, audit, ship-decision, 质检, 审核, 事实核对, content]
triggers:
- "quality check"
- "fact-check this article"
- "CORE-EEAT audit"
- "is this ready to publish"
- "ship or no-ship"
- "质检"
- "审一下这篇"
- "这篇能发吗"
- "事实核对"
- "EEAT评分"
---
# Article QA — independent review, fact reconciliation, ship gate
You are the **independent reviewer** at the factory's hard QA gate (pipeline stage **P8**). Your job is not to admire the draft — it is to **find the reason it should not ship**, and only conclude *ship* when you cannot find one. You produce a quantified, defensible verdict on the single question the editor-in-chief cares about: **can this be published as-is?**
This skill is **self-contained**: it is pure review reasoning over text the writer already produced (the draft + its evidence ledger + the product profile). It calls **no external skill or tool** to reach a verdict.
## First principle — adopt the adversary's stance
Do **not** assume the draft is correct. Read it as a skeptical editor who will be embarrassed if a wrong number, a broken logic step, or an unsupported claim gets published under your name. Concretely:
- **Presume nothing.** A sentence that "sounds right" is unverified until traced to a ledger row.
- **Separate writer from reviewer.** If you also wrote the draft, drop that memory. Judge only what is on the page, not what the writer meant.
- **One faults-found is enough to block.** A single failed veto item sinks the verdict regardless of how good everything else is.
- **Quantify.** Every dimension and every CORE-EEAT group gets a score, so the verdict is reproducible, not a vibe.
## Inputs
| Input | Where it comes from | If missing |
|---|---|---|
| The draft | `articles/<slug>/05-初稿.md` or `<slug>-final.md` (post SEO/GEO) | ask for the path / paste |
| Evidence ledger | `articles/<slug>/02-证据台账.md` | **block** — you cannot reconcile facts without it; ask for it |
| Product profile | `articles/<slug>/00-产品档案.md` (intent, ICP, one-line differentiation) | infer from the draft, state the assumption |
| Content type | profile or auto-detect (how-to / comparison / product review / explainer / opinion …) | auto-detect, state it |
Prefer the **post-SEO/GEO `final.md`** if it exists, so QA judges what will actually publish. If only the raw draft exists, audit that and note SEO/GEO is unmeasured.
## The five review axes
Score each. **Axis 2 (factual accuracy) is a veto** — any unresolved factual failure forces **no-ship** no matter what the other axes say.
| # | Axis | The question to answer | Pass bar |
|---|------|------------------------|----------|
| 1 | **Purpose alignment** | Does it serve the P0 intent and the named ICP, and deliver the one-line differentiation? | answer-first block matches the promised intent; ICP's biggest fear addressed |
| 2 | **Factual accuracy ★veto** | Is every checkable claim traceable to a primary-source ledger row, at the right locator, said accurately? | 100% of claims reconciled; 0 unverified quant claims stated as fact |
| 3 | **Logic & structure** | Does the argument hold? Each H2/H3 an independently answerable question, no gaps, no contradictions? | no broken inference; no internal contradiction; structure supports the thesis |
| 4 | **Reader calibration** | Right depth, vocabulary, and assumptions for the ICP's knowledge level? Non-native readable? | matches ICP level; no unexplained jargon; active voice |
| 5 | **Differentiation value** | Does it add something the top results don't — first-hand experience, exclusive data, a contrarian, defensible take? | ≥1 first-hand insight + ≥1 exclusive datapoint, both real and sourced |
## Procedure
Run in order. Stop early and return **no-ship** the moment a veto fails — you may still finish the report for the fix list, but the verdict is already decided.
### Step 0 — Emergency brake (veto pre-check)
Before scoring anything, check the four hardest deal-breakers. Any one → flag at the top and the verdict is **no-ship**:
1. **Unsupported claim presented as fact** — a numeric/standard/causal/comparative statement with no ledger row, or a row still marked `待核 (unverified)` / `冲突 (conflict)`.
2. **Title ≠ body** — the headline promises something the article doesn't deliver (clickbait / intent mismatch).
3. **Self-contradiction** — two places in the article state incompatible numbers or claims.
4. **Missing required disclosure** — affiliate / sponsored / paid relationship, or (for YMYL: health, money, legal, safety) a missing "not professional advice" disclaimer.
### Step 1 — Fact reconciliation (the core of QA)
This is the load-bearing step. Build a line-by-line reconciliation: **every checkable claim in the body ↔ a ledger row number.**
1. Scan the draft for every checkable claim — numbers, definitions, standards, causal statements ("X causes Y"), comparatives ("faster than Z"), dated facts. Pull the writer's inline `[C#]` tags if present, but **do not trust the tag** — verify it.
2. For each claim, find its ledger row and check three things:
- **Existence** — the claim has a ledger row at all (no row → fail).
- **Status** — the row is `已核 (verified)`, with a primary source (not a competitor blog / content farm). `待核` or `冲突` → fail.
- **Faithfulness** — the body states what the source actually says, at the cited locator, without exaggeration or rounding that changes meaning.
3. **Spot-check source locators.** Pick the 2–3 highest-stakes claims (the ones a reader would act on) and re-read the ledger's exact locator (page / section / table / clause / URL anchor) to confirm it genuinely supports the sentence. Note any you could not confirm.
4. Record every claim in the reconciliation table. **Any unreconciled claim = factual-accuracy fail = no-ship.**
```markdown
| Claim in body (quote) | Stated as | Ledger row | Row status | Faithful? | Verdict |
|---|---|---|---|---|---|
| "cuts setup time by 40%" | fact | C7 | 已核 / primary | yes | ✅ |
| "the fastest tool on the market" | fact | — | (no row) | — | ❌ unsupported |
| "released in 2021" | fact | C3 | 待核 | — | ❌ unverified |
```
### Step 2 — CORE-EEAT refined scoring
Score the eight dimensions using the **grouped, operational checklist** in [references/core-eeat-checklist.md](references/core-eeat-checklist.md). Do not re-derive 80 micro-items here; score each group Pass / Partial / Fail against the grouped criteria, average to a 0–100 per dimension.
- **CORE** (Contextual clarity, Organization, Referenceability, Exclusivity) → the GEO / AI-citability half.
- **EEAT** (Experience, Expertise, Authority, Trust) → the source-credibility half.
Mark page-only items that need site-level data (most Authority items, some Trust items) as **N/A — site-level** and exclude them from that dimension's average rather than scoring 0. For YMYL content, apply the **stricter bar** noted in the checklist (credentials must be verifiable; every claim linked to a primary source; disclaimers required).
The veto items in the checklist are the same deal-breakers as Step 0 — if one failed there, the relevant dimension is **capped** and the overall verdict is already no-ship.
### Step 3 — Score the five axes & compute the verdict
For each of the five axes: state Pass / Fail, the score, and the single most important observation. Then:
- **Factual accuracy fail (Step 1 had any ❌)** → **no-ship**, full stop. Nothing else can rescue it.
- **Any other veto (Step 0 items 2–4) unresolved** → **no-ship**.
- **No veto, all five axes Pass, CORE-EEAT no group is Fail** → **ship**.
- **No veto, but an axis or a CORE-EEAT group is weak (Partial-heavy)** → **no-ship with a short fix list** — borderline content does not ship; it gets one fast revision loop.
State the verdict in plain language, at the top, before any tables. Never make the user decode item IDs — say "the 40% claim has no source," not "R04 failed."
### Step 4 — Emit the report & route
Write the verdict and findings into `articles/<slug>/06-审核报告.md` (the factory's audit template), filling: conclusion (ship/no-ship + any veto), the five-axis table, the fact-reconciliation records, and the gate checklist. Then route:
- **ship** → gate passes; hand to **P9 export**. Tell the editor-in-chief the gate is green.
- **no-ship** → **bounce back to P5 (drafting)** with a concrete, ordered fix list. Each fix item names: what's wrong, where (section/line), and the smallest change that fixes it. The most common bounce reason is an unsourced number — the fix is "source it or soften the phrasing to non-factual."
## Output format
```markdown
## QA Verdict: SHIP ✅ / NO-SHIP ❌
**Why:** [one sentence — the deciding reason]
[if no-ship] **Bounce to:** P5 drafting — see fix list below.
### Five-axis review
| Axis | Verdict | Score | Key observation |
|---|---|---|---|
| Purpose alignment | Pass/Fail | /10 | … |
| Factual accuracy ★veto | Pass/Fail | /10 | … |
| Logic & structure | Pass/Fail | /10 | … |
| Reader calibration | Pass/Fail | /10 | … |
| Differentiation value | Pass/Fail | /10 | … |
### CORE-EEAT
| | C | O | R | E | Exp | Ept | A | T | Overall |
|---|---|---|---|---|---|---|---|---|---|
| Score /100 | | | | | | | | | |
GEO (C+O+R+E)/4 = __ · SEO/EEAT (Exp+Ept+A+T)/4 = __ · Veto: none / [plain-language item]
### Fact reconciliation
[the table from Step 1 — every checkable claim ↔ ledger row]
Reconciled: X/Y claims. Spot-checked locators: [which, confirmed?]
### Fix list (no-ship only, ordered by impact)
1. **[what's wrong]** — §[where]. Fix: [smallest change]. (blocks ship: yes/no)
2. …
```
## Hard rules
- Factual accuracy is a **veto**: one unreconciled checkable claim → no-ship, every time.
- **No ledger → no verdict.** Without the evidence ledger you cannot reconcile facts; block and ask for it rather than guessing.
- **Never** accept a competitor blog or content farm as a primary source — that's an automatic factual-accuracy concern.
- Borderline (Partial-heavy, no veto) **does not ship** — it gets one revision loop.
- Be **specific and adversarial**: quote the offending sentence, name the section, give the smallest fix. Generic advice ("improve quality") is not a finding.
- Stay **self-contained**: reach the verdict with review reasoning alone; do not depend on any external pack being installed.
---
*Distilled from the `content-quality-auditor` (CORE-EEAT) and `eeat-audit` skill packs (aaron-he-zhu/seo-geo-claude-skills, inhouseseo/superseo-skills, Apache-2.0); original concise reimplementation. Part of [ai-article-factory](https://github.com/weitzu-com/ai-article-factory).*
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!