# Article Quality Check

> 文章定稿前质量终检——机检门禁（make article-check：relref 有效/段落≤4行/标题数字正文一致/时间格式/代码块行数/收尾形态/重复片段/配图引用）+ 六大编辑终检清单（润色复查/AI 味复判/趣味密度/流畅性/合理性/技术深度）+ 多篇隔离检查。文章润色定稿后、发布前的统一收口入口；编排 de-ai-smell/compliance/talkshow 的终检，不改它们的规则。

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

---


# 文章质量终检（article-quality-check）

文章定稿前的最后一道质量收口。**触发时机：blog-writing 第 8 步（验证）**——机检跑 `make article-check slug=<slug>`，编辑终检按本 skill 六组清单过。产出是**问题清单**，不自动改稿；修稿由写作会话执行后复跑。

## 定位与分工（先读，防止越界）

本 skill 是**编排者 + 补位**，四个既有权威不动：

| 权威归谁 | 内容 | 本 skill 做什么 |
|---|---|---|
| de-ai-smell | AI 味词表与阻断语义 | 调用 `make check-ai-smell path=<md>`，只复判机检不全的**句式变体** |
| platform-compliance | 违禁词与平台红线 | 调用 `make check-compliance path=<md>` |
| talkshow | 梗规则与六维口径 | 趣味向文章按其六维复检（本 skill 引用不重写） |
| metadata-optimizer | 标题流程 | 不碰（标题在写作期已定稿） |

## 机检门禁（一键，❌ 阻断发布）

```bash
make article-check slug=<slug>
# 等价：py -3.11 .skills/skills/article-quality-check/scripts/check_article.py --slug <slug>
```

九项 ERROR + 三项 WARN（口径见 openspec `article-quality-gate` design）：

| # | 检查 | 级别 | 说明 |
|---|------|------|------|
| 1 | relref 目标存在 | ❌ | `{{< relref "posts/x.md" >}}` 指向的文件必须在 `content/posts/` |
| 2 | 段落 ≤4 行 | ❌ | front matter/代码块/表格/列表/图片行不计 |
| 3 | 标题数字在正文出现 | ❌ | title 里的数字（5 个瞬间/30 倍）正文必须兑现 |
| 4 | 代码块 ≤15 行 | ❌ | 手机可读性 |
| 5 | 结尾段不是列表 | ❌ | 结论式散文收尾，禁 checklist 收尾 |
| 6 | SVG 存在 | ❌ | `<img src="/svg/...">` 文件在 `static/svg/` |
| 7 | 时间完整格式 | ❌ | 禁「N 月 N 日/昨天/前天」简写（教学示例代码块内除外） |
| 8 | 同段冒号 ≥3 | ⚠️ | 对照修辞排比合法（人工判），滥用则减 |
| 9 | ≥10 字重复片段 ≥2 次 | ❌ | 跨全文重复句 |
| W1 | 破折号 >2 | ⚠️ | 与 de-ai-smell 口径一致的复检 |
| W2 | 配图配额不足 | ⚠️ | max(2, 字数÷1800)，blog-writing 口径 |
| W3 | 零 relref | ⚠️ | 提示孤立文章，首篇合法 |

机检全绿 ≠ 终检通过——下面六组是机检管不了的判断。

## 六大编辑终检组（LLM/人工逐组过）

### A 润色复查
精简（删冗余修饰、口头禅、被动转主动）、准确（术语到版本、数字具体、禁「很多/大幅」）、生动（动词>名词、场景>概念）。**重点盯修改轮引入的新问题**：多轮补丁后，新句子常与上下文不合身——重复表述、突然的书面腔、与全文口吻不接。

### B AI 味复判（机检之后的变体层）
L1 归零后仍需人工看三类机检不全的：顿悟句式短形式（「不是A，是B」「不在X，在Y」）、补丁式总结段残留（章节标题带「回到本质/核心是」类）、三连对仗（连续两个对仗即拆）。判断口诀沿用 de-ai-smell：这个词换掉意思变吗？不变就改。

### C 趣味检查（仅趣味/脱口秀向文章触发）
判断标准：文章写作时挂过 talkshow 或自称趣味/口语风格。检查：逐梗六维打分（真实/清晰/惊奇/声音/可演/密度，0-3 分）先修最低维；禁区核对（数据陈述句/结论段/CTA 零玩笑）；每梗驮知识点（梗完必有干货收）；密度按写作时定的档位复核。非趣味文章跳过本组。

### D 流畅性
- 重复问句/重复表述：同一问题或同一论断出现两次以上（第二处改引用式带过）
- 顿挫：破折号/双冒号超量（机检已拦同段双冒号，这里看跨段滥用）
- 转场：节间过渡指向具体内容（「下一节会看到 X」），禁「但是/然而」空垫词、禁自问自答
- 扫读测试：只读小标题+段首句+加粗，逻辑仍成立
- 指代：「上一节说过」类引用能对上实际章节

### E 合理性
- 逻辑链闭合：主张-论据-结论无断环；开头钩子的承诺正文有回收
- 表述准确：主语不错位（「没人逼它做影响分析」→ 实为流程缺失不是逼不逼）、因果不倒置
- 边界自洽：适用边界的表述与正文主张不打架（「小项目不需要」与「为什么大项目需要」不矛盾）
- 案例因果通顺：时间线、状态流转、模块依赖方向正确

### F 技术深度
- **断言准确性（最高优先）**：计费/版本/行为类时效断言逐一核对。高危清单：推理型模型思维链按输出价计费、缓存按前缀严格匹配、上下文压缩保代码不保约定、工具协议握手时序——这类断言写错比少写严重
- 落地性：每个核心概念有「怎么落地」；只有「是什么」没有「怎么做」的段，补操作或删概念
- 代码/示例正确：语法、依赖方向、示例值逻辑自洽；教学示例标注为示例，不冒充真实事故
- 深挖机会：对照素材源（逐字稿/引文）是否漏掉高价值技术点——漏的判断「补进本文」还是「留给续篇」

### G 补充项
- 数字一致性人工半：正文↔图注↔表格同事实数字一致（机检只覆盖标题↔正文）
- 事实边界：示例日期/编号/数据可溯源；「17 处调用」这类演示值须在示例语境内
- 术语一致性：同一概念全文同一名（会话 vs 对话、模块 vs 组件、层 vs 层级——混用即统一）
- 钩子兑现终核：开头每个承诺逐节有回收点
- 配图 alt 与图内容一致（图重画后 alt 常忘同步——2026-08-31 实例）

## 多篇隔离检查（同批 ≥2 篇时必跑）

一次会话产出多篇（双选题仿写、系列拆批量产）时：

1. **比喻体系词表不相交**：每篇提取核心比喻词（如 A 篇「员工/入职/试用期/述职」vs B 篇「收音机/CPU/插座/保险丝」），交叉出现即报（图 alt 文字也算）
2. **relref 集合不相交**：两篇互链对象无交集（共享同一篇时评估是否真必要）
3. **核心梗不重复**：同款包袱/金句只允许出现在一篇
4. **叙事框架不重复**：都是「四层/五个」式清单文时，检查节结构模板是否雷同到流水线感

## H 组：公众号适配检查（`--wechat` 模式，同步公众号前必跑）

```bash
make article-check slug=<slug> wechat=1
```

规则权威在 blog-writing `references/wechat-retention.md`（本组只机检其可自动化子集 + 引导人工项）。分层：

**ERROR（判废级/硬规）**
1. **转化段泄漏**：源稿出现「点个在看/在看让我知道/点个关注/关注我/后台回复/分享到朋友圈/转发抽奖」——转化段只许 draft-only 后台补（wechat-retention §6）
2. **`/posts/` 死路径**：正文出现 relref 短码以外的 `/posts/` 字面路径（2026-08-31 判废级定规；文末「接着读/往期/延伸阅读」+ 路径的导览散文段同报）
3. **wechat_title**：自身 >25 字；或缺失且主标题 >25 字（回退必超折叠线）
4. **cover.png 缺失**：`static/images/<slug>/cover.png`（打开层转化件，禁视频封面直搬/架构图兜底）

**WARN（留存层）**
5. wechat_digest 缺失（回退 description，核对前 40 字）或 digest/description 前 40 字无痛点词/硬数字
6. wechat_title 前 13 字无钩子信号（数字/痛点/反差词）
7. 封面图出现在正文（2026-09-05 定规：正文不展示封面，公众号封面由 prepare.py 从 `static/images/<slug>/cover.png` 直取）
8. 首屏无图（第一个 `<img>` 在 800 字之后）
9. 二级标题间隔 >1200 字（列出超长区间，拆节给滚动锚点）
10. 无可收藏资产（表格/清单型代码块一处都没有——收藏是完读外最强质量信号）
11. 无「往期关联」节，或条数不在 2-3（样板 = codex-auto-video-editing 文末：钩子问句 + relref 列表）

**信息级输出**
- 长度档位判定：≤2500 直发 / 2500-4000 压缩变体 / **>4000 默认压缩变体**（直发是例外，需 link-map 记豁免理由——2026-08-29 收紧定规）

**人工项（机检管不了，逐条过 wechat-retention §8 清单）**：90 秒规则（前 600 字能否复述核心判断）、前 150 字问题定义+钩子、首屏手机预览、关注引导带持续价值理由、标题含可搜关键词、发布配置四查（作者/合集/原创声明/广告开关）、定时 20:00-21:00 窗口、48h 回看排期。

## 标准动线（写进 blog-writing 第 8 步）

```
文章定稿（第 1-7 步完成）
  ↓ make article-check slug=<slug>          机检，❌ 阻断
  ↓ 六组终检（C 组按文章风格跳过/执行）      产出问题清单
  ↓ 修稿 → 复跑机检
  ↓ 全绿 → 进第 9 步发布前清单
```

## 工程约束

- 脚本 Windows 显式 `encoding='utf-8'`，输出对齐 check-ai-smell 风格（路径:行号 [标签]）
- 机检只定位不修改；ERROR 必须处置（修稿或给出保留理由），WARN 逐条人工判
- 本 skill 不进 CI、不挂定时——由写作会话在第 8 步触发

