# 去AI味审校体系与评分模型

> 审校/质检权威入口：分层 S/P/C/B 审校 + G 门禁 + C0 全书一致性 + Panorama / Deep 两阶段流程。
> 当前文档口径与 `scripts/quality-auditor-lite.mjs`、`scripts/quality-auditor.mjs`、`scripts/quality-panorama-orchestrator.mjs` 保持一致。

**补充（体裁完成度 / 告警分级）**：[`genre-completion-checklist.md`](./genre-completion-checklist.md) · [`writing-phase-alert-tiers.md`](./writing-phase-alert-tiers.md)

---

## §0.5 存量质检前置门禁

当目标目录只有存量 Markdown 文件、尚未初始化 `.fbs/` 时，先执行以下门禁：

1. 检测 `{bookRoot}/.fbs/` 是否存在。
2. 若不存在，提示当前任务将进入**存量质检模式**：
   - 仅创建最小工作面：`.fbs/book-context-brief.md`、`.fbs/chapter-status.md`、`qc-output/`
   - 跳过 S0 完整初始化、素材库、`deliverables/`、`releases/`
   - 允许直接执行 `quality-auditor-lite.mjs` / `quality-auditor.mjs` / `quality-panorama-orchestrator.mjs`
3. 运行环境优先检查 Node.js；若 Node 不可用，则切换到 `scripts/quick-scan.ps1` 或对话模式工具箱。
4. 存量模式默认只产出质检结果与修复建议，不自动宣称进入 S6 转化或 HTML 构建。

---

## §0.6 全书 A 类命令词门禁与质检 Profile（P0）

**范围（写作稿）**：默认扫描 `chapters/**/*.md` 与 `deliverables/**/*.md`（与 `quality-runtime` 忽略策略一致；不含 `.fbs/` 内台账）。

**单一推荐门禁命令**（全书 A 类词合计 ≤3，见 `quality-S.md`）：

```bash
node scripts/quality-auditor.mjs --profile manuscript --book-root <书稿根> --skill-root <技能包根> --enforce-imperative-book
```

- **门禁判定**以该命令 **exit code 0** 且报告内 `imperativeBookTotal ≤ 3` 为准；`quick-scan.ps1` 仅输出命中统计，不作门禁替代。
- **规范文档扫描**（`references/**`、`SKILL.md`）使用 `--profile skill-doc`，默认**不**对 A 类词告警，避免规范用语与写作稿口径混淆。

详见 [`fbs-optimization-roadmap-spec.md`](../05-ops/fbs-optimization-roadmap-spec.md)、`fbs-runtime-hints.json` → `gates.optimizationRoadmapSpec`。

---

## 第1节 评分体系 + 审校框架

### 1.1 四层等权 10 分制

| 层 | 当前规则数 | 层内满分 | 计算方式 | 当前脚本口径 |
|---|---:|---:|---|---|
| S | 6 | 10 | 通过条数 ÷ 6 × 10 | `S1-S6` |
| P | 4 | 10 | 通过条数 ÷ 4 × 10 | `P1-P4` |
| C | 4 | 10 | 通过条数 ÷ 4 × 10 | `C1-C4` |
| B | 6 | 10 | 通过条数 ÷ 6 × 10 | `B0 / B1 / B2_1 / B2_2 / B2_C / B3` |

> 说明：当前脚本把 **B0 编号唯一性** 也纳入 B 层机读评分，同时它仍然是 P0 结构门禁；这是为了避免“分数很好但编号全乱”的假通过。

### 1.2 综合分

```text
综合分 = (S + P + C + B) ÷ 4
```

- 四层等权，不再使用“20 分原始分再 ÷2”的折算口径。
- 输出统一保留到 **1 位小数**。
- `quality-auditor-lite.mjs` / `quality-panorama-orchestrator.mjs` 默认按此规则输出 `overall`。

### 1.3 V1 附加指标

V1 不并入当前四层综合分，作为**附加观测项**单独输出：

- 当前含义：**视觉密度 / 图文支撑度**
- 推荐口径：每 5000 字至少 1 个图表、图片、Mermaid 图或有效表格块
- 使用方式：
  - 普通书稿：只记录，不影响综合分
  - 图文书 / 展示型书稿：主编可把 V1 作为附加参考项复核，不建议对所有体裁强制自动加权

### 1.4 G 分项：门禁制

G 分项不再与 S/P/C/B 混算，统一按**门禁制**处理：

```text
G = pass / fail
```

- 任一 G 项触发红灯，该章或该轮结果**不得宣称通过**。
- G 结果必须与综合分并列展示，不能只报分不报门禁。
- G 分项更适合人工复核、事实核查、版权核查、定制规范核查等任务。

### 1.5 通过阈值

| 等级 | 条件 | 含义 |
|---|---|---|
| **通过** | 综合分 ≥ 7.5 且 G 全绿 | 可进入下一阶段 |
| **弱通过** | 7.0 ≤ 综合分 < 7.5 且 G 全绿 | 建议润色后继续 |
| **不通过** | 综合分 < 7.0，或 G 有红灯 | 须修改后重检 |

### §1.0 审校顺序说明

1. 先确认范围、规模、运行环境，再选模式。
2. 机器可检项优先走脚本；需要主观判断的项，再交给 Critic / 主编复核。
3. Writer 不得跳过质检直接宣称 S6 已完成。
4. 多智能体模式下，先完成任务切分和落盘约定，再启动子任务。

### §1.1 两阶段质检流程

#### 第一阶段：概览扫描（Panorama Scan）

- **触发条件**：默认用于目标文件数 **> 10** 的书稿；超过 50 章时建议优先采用。
- **执行内容**：
  - 机器可检项全量扫描：S2 / S4 / S5 / S6
  - 按分组抽样若干文件，执行完整 S/P/C/B 评分
- **输出**：`qc-output/panorama-report.json`、`qc-output/panorama-report.md`

#### 第二阶段：精检（Deep Audit）

- **触发条件**：
  - 目标文件数 ≤ 10
  - 或 Panorama 已完成，准备对高风险分组逐章复核
- **执行内容**：
  - 完整 S/P/C/B 审校
  - C0 全书一致性复查
  - 必要时追加 G 门禁与人工核验
- **输出**：逐文件评分、问题清单、必要时生成 partial / stage 报告

#### 规模策略

| 规模 | 文件数 / 章节数 | 默认策略 |
|---|---|---|
| S | ≤ 10 | 全量精检 |
| M | 11-50 | Panorama → Deep |
| L | 51-150 | Panorama + 高风险抽样精检 |
| XL | > 150 | 先分卷 / 分目录执行 Panorama，再按风险推进 Deep |

### §1.2 脚本模式与输出

| 脚本 | 主要用途 | 典型参数 | 默认输出 |
|---|---|---|---|
| `quality-auditor-lite.mjs` | 轻量 S/P/C/B 评分 | `--standalone --book-root <path> --min-score 7.5` | `qc-output/quality-audit-lite.json` |
| `quality-auditor.mjs` | 机器可检项扫描 / auto-fix | `--standalone --auto-fix --json-out <path>` | `qc-output/quality-audit-machine.json` |
| `quality-panorama-orchestrator.mjs` | Panorama / Deep 总控 | `--mode panorama|deep --bare` | `qc-output/panorama-report.*` 或 partial/stage 报告 |
| `quick-scan.ps1` | 无 Node 时的 PowerShell 快速扫描 | `-BookRoot <path> -Output <json>` | 指定 JSON 文件 |

### §1.3 CV 类指标执行约定

- `B2_1`（段落节奏 CV）与 `B3`（全局节奏 CV）在 **Deep / Lite** 阶段输出具体数值。
- Panorama 阶段只用抽样文件承载完整 S/P/C/B 评分，不要求对全量文件都计算 CV。
- 若报告中出现“待精检”，表示当前只完成机器筛查，尚未完成节奏类细项复核。

---

## 第2节 分层检查速查

### 2.1 S 层（句级）

| 规则 | 关注点 | 机读支持 |
|---|---|---|
| S1 | 首句具体，不要套话开场 | Lite |
| S2 | 冗余修饰归零 | Lite / Machine / Quick Scan |
| S3 | 超长句占比控制 | Lite |
| S4 | 连接词降温 | Lite / Machine / Quick Scan |
| S5 | Buzzword 黑名单 | Lite / Machine / Quick Scan |
| S6 | 标点纪律，重点看破折号 | Lite / Machine / Quick Scan |

### 2.2 P 层（段级）

| 规则 | 关注点 | 机读支持 |
|---|---|---|
| P1 | 问题驱动，而非概念驱动 | Lite |
| P2 | 直接引语 / 对话支撑 | Lite |
| P3 | 避免对称排比 | Lite |
| P4 | 注水段归零 | Lite |

### 2.3 C 层（章级）

| 规则 | 关注点 | 机读支持 |
|---|---|---|
| C1 | 承认局限并给出明确表态 | Lite |
| C2 | 结尾指向行动 | Lite |
| C3 | 打破结构均匀 | Lite |
| C4 | 数据具体，不用整数百分比糊弄 | Lite / Machine |

### 2.4 B 层（篇级）

| 规则 | 关注点 | 机读支持 |
|---|---|---|
| B0 | 标题编号唯一 | Lite / Machine / Quick Scan |
| B1 | 标题去公式化 | Lite |
| B2_1 | 段落节奏 CV | Lite |
| B2_2 | 标点多样性 | Lite |
| B2_C | 结构雷同检测 | Lite |
| B3 | 全局节奏综合 | Lite |

### 2.5 V1 / C0 / G

| 项目 | 定位 | 说明 |
|---|---|---|
| V1 | 附加观测项 | 视觉密度 / 图文支撑度 |
| C0 | 全书终审门禁 | 去重、术语一致、全书数据一致、HTML 交付门禁 |
| G | 人工门禁 | 事实、版权、定制规范、专业性等红线核查 |

---

## 第3节 报告模板

### 3.1 章级质检报告模板（10 分制）

```markdown
## 第 X 章质检报告

- 综合分：7.8/10
- G 门禁：pass
- V1：2.0/10（普通章节，仅记录）

### 分层评分
| 层 | 分数 | 结论 |
|---|---:|---|
| S | 8.3 | 通过 |
| P | 7.5 | 通过 |
| C | 7.5 | 通过 |
| B | 7.8 | 通过 |

### 主要问题
1. [S5] 命中 buzzword 3 处
2. [S6] 破折号密度 1.8/千字
3. [B0] 有 1 处重复编号

### 下一步建议
- 先用 `quality-auditor.mjs --auto-fix` 生成机器可修项 diff
- 再复核 P / C / B 层主观问题
```

### 3.2 全书级质检报告模板（压缩版）

> 全书级主报告建议控制在 **5000 字以内**；逐章详情应拆到单独文件或落盘目录。

```markdown
## 全书质检报告 · 压缩版

- 时间：{ISO 时间}
- 范围：{卷号 / 目录}
- 模式：{panorama / deep}

### 综合评分
| 分组 | 综合 | S | P | C | B | G门禁 | 风险 |
|---|---:|---:|---:|---:|---:|---|---|
| 卷一 | 7.8 | 8.3 | 7.5 | 7.5 | 7.8 | 全绿 | 🟡 |

### 全局问题 TOP10
| 优先级 | 问题 | 范围 | 分项 |
|---|---|---|---|
| P0 | 标题编号重复 | 卷三 / 第 2 章 | B0 |
| P1 | Buzzword 密度偏高 | 卷一 | S5 |

### 机器热力图
| 分组 | S2密度 | S4密度 | S5命中 | S6密度 |
|---|---:|---:|---:|---:|
| 卷一 | 0.8 | 0.5 | 6 | 1.4 |

### 逐章详情
详见：`qc-output/chapter-detail-*.md` 或 `.workbuddy/memory/qc-*.md`
```

### 3.3 G 门禁记录模板

```markdown
### G 门禁
| 项 | 结果 | 说明 |
|---|---|---|
| G1 版权 / 合规 | pass | 无明显问题 |
| G3 事实核查 | fail | 关键数据未给来源 |
| G6 定制规范 | pass | 与用户约束一致 |

结论：本章综合分 7.8/10，但 G3 失败，当前不得宣称通过。
```

---

## 第4节 常见执行约束

1. **>50 章** 的书稿，默认先跑 Panorama，再决定是否进入 Deep。
2. Writer 可以自检 S 层，但**不得**自己宣布 G 门禁通过。
3. 多智能体质检必须先确定结果落盘路径，再派发子任务。
4. 裸仓库场景优先使用 `--standalone` / `--bare`；无 Node 场景退回 `quick-scan.ps1`。
5. HTML / MD 预览遵循展示链路规则，最终展示优先走 `preview_url`，不要直接把 HTML 当 `open_result_view` 目标。

---

## 第5节 S4 质检强制规范（v2.1.1 新增）

> **核心变更**：S4 质检从「可选菜单」升级为「强制清单」。任何条目不得跳过，任何❌项综合分不得高于 7.5。

### 5.1 S/P/C/B 20+3 条完整勾选表（零条目可跳过）

S4 质检**必须**输出以下格式的完整勾选表，**不允许任何条目被省略**：

```markdown
## S4 质检完整勾选表（v2.1.1 强制）

| # | 层 | 规则 | 检出数/密度 | 评级 | 证据（≥1处原文引用） |
|---|----|----|-----------|------|-------------------|
| S1 | S | 首句具体性 | 0处违规 | ✅ | — |
| S2 | S | 消灭冗余修饰（A类词全文计次） | A类词N次 | ✅/❌ | 命中词+位置 |
| S3 | S | 短句优先（超40字句占比）| X% | ✅/❌ | 最长句原文 |
| S4 | S | 连接词降温（C类总密度）| N/千字 | ✅/❌ | 高频词+出处 |
| S5 | S | buzzword黑名单 | 0处 | ✅/❌ | 命中词+出处 |
| S6 | S | 标点纪律（破折号密度）| N/千字 | ✅/❌ | 密度 |
| P1 | P | 问题驱动（定义驱动段数）| 0处 | ✅/❌ | 违规段首句 |
| P2 | P | 直接引语密度（≥1处/2000字）| N处/万字 | ✅/❌ | 计算过程 |
| P3 | P | 禁止对称排比 | 0处 | ✅/❌ | 违规段 |
| P4 | P | 拒绝注水 | 0处 | ✅/❌ | 注水段 |
| C1 | C | 承认局限+明确表态（每章≥1次）| N/N章 | ✅/❌ | 缺失章节 |
| C2 | C | 结尾指向行动 | N/N章 | ✅/❌ | 缺失章节 |
| C3 | C | 打破结构均匀（变异系数≥0.3）| σ/μ=X | ✅/❌ | 同构章节列表 |
| C4 | C | 数据具体性（整数百分比<20%）| X% | ✅/❌ | 整数数据示例 |
| C5 | C | 章节衔接（末段钩子+首段连贯+跨章重复）| N项未达标 | ✅/❌ | 缺失衔接的章节 |
| B0 | B | 标题编号唯一 | 0处重复 | ✅/❌ | 重复编号 |
| B1 | B | 标题去公式化 | 0处 | ✅/❌ | 违规标题 |
| B2-A | B | 段落节奏（变异系数≥0.3）| CV=X | ✅/❌ | — |
| B2-B | B | 标点多样性（≥5种/千字）| X种/千字 | ✅/❌ | — |
| B2-C | B | 结构雷同检测（连续≤2章同构）| N处违规 | ✅/❌ | 连续同构章节 |
| B3 | B | 全局节奏综合（章节长度CV）| CV=X | ✅/❌ | — |
| 附加① | — | 承诺兑现率（ch00/ch01承诺逐一核查）| N/N已兑现 | ✅/❌ | 未兑现承诺原文 |
| 附加② | — | 品牌植入合规（工具品牌名≤1次/章）| 超标N章 | ✅/❌ | 超标章节 |
| 附加③ | — | 字数完成度（当前字数/目标字数）| X% | ✅/❌ | 当前字数 |
```

**门禁规则**：
- 任何条目标注为❌时，综合分**不得高于 7.5**
- 字数完成度 < 50% 时，S4 **不得判「通过」**，不论其他条目得分如何
- 承诺兑现率任一未兑现 = P0，不得判「通过」

### 5.2 S4 分步执行（降低上下文压力）

S4 质检改为分 4 步执行，每步结果写入 `.fbs/quality/` 目录持久化，防止上下文压力导致跳检：

```
Step 1：S层扫描（S1–S6，6条）
  → 写入 .fbs/quality/s-layer-result.md
  → 重点：S2 须全文计次 A 类词，输出命中清单；S6 须计算破折号密度

Step 2：P层扫描（P1–P4 + 承诺兑现率）
  → 写入 .fbs/quality/p-layer-result.md
  → 重点：P2 须计算直接引语密度（每千字几处）；承诺兑现率须逐条核对 commitments.md

Step 3：C层扫描（C1–C5 + 品牌植入合规）
  → 写入 .fbs/quality/c-layer-result.md
  → 重点：C3 须计算变异系数；C5 须检查每章首段连贯+末段钩子；品牌名须全文计次

Step 4：B层扫描（B0–B3）+ 汇总
  → 写入 .fbs/quality/b-layer-result.md
  → 执行字数完成度计算（当前字数 / project-config.json 中 targetWordCount）
  → 汇总输出 .fbs/quality-report-{timestamp}.md（含完整勾选表 + 综合分 + 门禁结论）
```

> 每步只加载当前层的规则文件 + 已写章节文件，上下文压力降低约 75%。
> 每步结果落盘后，才进入下一步，防止中途失忆。
