# Wiki Review

> 单个 wiki 页面"格式对齐 + 过期归档"工具。把多次更新后混乱的页面对齐到 value-invest 模板的章节顺序，并把过期内容归档到「历史观察」附录。Use when user says "review 某页面"、"整理某页面"、"归档某页面的过期内容"、"某页面格式乱了"。

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

---


# Wiki Review Skill

## 定位

针对**用户指定的单个 wiki 页面**，做三件事：

1. **对齐 value-invest 模板**：保证多次更新后章节顺序与命名仍然统一
2. **过期内容归档**：把已被替代/已触发的内容移到「历史观察」附录
3. **错误信息直接删除**：被证伪的内容真删，git log 兜底（不归档进历史观察，避免附录变垃圾场）

**核心原则**：value-invest 模板（`skills/value-invest/templates/stock-analysis.md`）是 wiki 个股页面格式的 **single source of truth**。wiki-review 不发明新结构，只做"回归模板"。

## 适用范围

**仅适用于个股页面**（`wiki/stocks/<sector>/<name>.md`，且**排除** `wiki/stocks/价格区间总览.md` 这类索引文件）。其他类型页面：

| 页面类型 | wiki-review 行为 | 退出原因 |
|---|---|---|
| 个股页（`wiki/stocks/<sector>/`） | ✅ 完整执行 | — |
| 行业/板块页（`wiki/sectors/`） | ❌ 退出 | 无对应 value-invest 模板 |
| 宏观主题页（`wiki/macro/`） | ❌ 退出 | 无对应模板 |
| 策略页（`wiki/strategies/`） | ❌ 退出 | 无对应模板 |
| 投资日志（`wiki/journal/`） | ❌ 退出 | 时间序列记录，不该被重排 |
| 索引/总览（`wiki/index.md` / `wiki/log.md` / `wiki/stocks/价格区间总览.md`） | ❌ 退出 | 中央索引，由各 skill 各自维护 |
| `wiki/stocks/focus/*` 软链 | ✅ 自动 follow 到真实路径继续执行 | focus 软链指向真实个股页，应当 follow 而不是退出 |
| 基金/ETF 页（`wiki/funds/`） | ❌ 退出 | 基金有独立模板，未对齐 value-invest（后续如有需要可扩展，需要新模板） |

## 硬约束

| 约束 | 含义 |
|---|---|
| **不动模板内章节内容** | 只调整章节相对位置，不改章节内文字（重排时整段搬移） |
| **不删除有效信息** | 过期但仍有信号的内容（v1 估值、已触发催化剂）归档到「历史观察」 |
| **错误信息直接删除** | 被证伪的内容真删，不归档（git log 兜底）。「历史观察」只放有信号的历史判断，不收垃圾 |
| **不重命名章节标题文字** | 但允许把页面里的旧名（如"风险因素"）统一为模板标准名（"风险提示"），见下方"命名映射表" |
| **不动 ingest 原始数据** | 财报数字、历史事件、原始引用保留 |
| **不动 frontmatter（除 updated）** | 只更新 `updated: YYYY-MM-DD` 字段；frontmatter 缺失时**不主动新建**，只在 dry-run 标注请用户决定 |
| **不动 raw/articles/** | review 只改 wiki/ |
| **不动 stock-deep-dive 输出章节** | `## 产品深度分析 (YYYY-MM-DD)` 这类带日期的章节由 stock-deep-dive 显式要求保留历史，wiki-review 不归档不重排，整体当一个 block 移到 value-invest 之后 |
| **不扫全 wiki** | 用户必须指定页面路径，没指定就反问 |
| **必须 dry-run 后再执行** | Step 4 输出 plan，Step 5 等用户确认后才执行 |

## When to Use

**触发**（必须满足任一）：
- 用户明确说："review 某页面 / 整理某页面 / 归档某页面 / 某页面格式乱了"
- 用户读完一个页面后说"这页面太长 / 重复 / 看着乱"且明确指了页面

**禁止触发**：
- 用户没指定具体页面（应反问"哪个页面"）
- 用户在请求新分析或 ingest（那是 value-invest / stock-deep-dive 范畴）
- 全 wiki 扫描（不在本 skill 范围）

> 注：本 skill 不做"主动建议触发"——LLM 无法可靠计数页面历史触发次数，主动建议易误判。统一由用户主动调用。

## Source of Truth：完整目标章节顺序

source of truth 是 `skills/value-invest/templates/stock-analysis.md`（章节 1-11）。完整目标顺序：

| # | 章节 | 来源 |
|---|---|---|
| 0 | 基本信息（H1 标题之后、首个 `## ` 之前的隐式段，或显式 `## 基本信息`） | wiki 自有元数据 |
| 1 | TL;DR | wiki 自有简短结论 |
| 2 | **投资结论**（含价格区间四档表） | **value-invest 模板第 1 章** |
| 3 | **合理PE推导** | value-invest 模板第 2 章 |
| 4 | **多模型估值** | value-invest 模板第 3 章 |
| 5 | **远期分析**（如适用） | value-invest 模板第 4 章 |
| 6 | **利润分解与交叉验证**（如适用） | value-invest 模板第 5 章 |
| 7 | **安全边际与买卖价** | value-invest 模板第 6 章 |
| 8 | **核心财务数据** | value-invest 模板第 7 章 |
| 9 | **同行对比** | value-invest 模板第 8 章 |
| 10 | **风险提示** | value-invest 模板第 9 章 |
| 11 | **关键关注点** | value-invest 模板第 10 章 |
| 12 | **附：格雷厄姆参考尺** | value-invest 模板第 11 章 |
| 13 | 业务结构 / 业务画像 | wiki 自有（用户自由写的业务深度，非 stock-deep-dive 输出） |
| 14 | 竞争格局 / 国际同行 / A股同行 | 同上 |
| 15 | 护城河 / 产业链 | 同上 |
| 16 | 资本运作 / 海外业务 / 子公司分拆等深度章节 | 同上 |
| 17 | 详细数据 / 资产负债表细项 | 同上 |
| 18 | `## 产品深度分析 (YYYY-MM-DD)` × N | **stock-deep-dive 显式输出**（带日期标题）；wiki-review 当 block 整体移到此位置，**保留这些章节之间的原始相对顺序**（不主动改它们的排序，stock-deep-dive 自己决定是否降序），不归档不动其内容 |
| 19 | 相关链接 | wiki 自有元数据 |
| 20 | 信息来源 | 同上 |
| 21 | 更新记录 | 同上 |
| 22 | 历史观察（附录） | wiki-review 自建/追加，真·最后 |

> 加粗章节（2-12）是 value-invest 模板的核心，相对顺序**严格不变**。其余章节按上述位置排，缺则不强加。

**判定**：如果页面里某章节既不属于上述列表也不在命名映射表，归类为"未识别章节"，**保留在原位置不动**，dry-run 中由用户决策。

## 章节命名映射表

页面里出现以下旧名时，统一改为右列的模板标准名：

| 页面旧名（候选） | 模板标准名 |
|---|---|
| 风险因素 / 主要风险 / 风险点 | **风险提示** |
| 当前估值 / 估值水位 / 估值分析 | **多模型估值**（若已含模型对比） |
| 投资逻辑 / 看多看空 | **投资结论**（仅当含价格区间表时映射；不含表的"看多看空"列表保留为未识别章节，dry-run 询问用户） |
| 一句话总结 / 核心结论 / 一句话 | **TL;DR** |
| 跟踪信号 / 短期跟踪 / 下一步关注 | **关键关注点** |
| 财务亮点 / 关键财务指标 / 财务全景 | **核心财务数据** |
| 同业比较 / 同业对照 | **同行对比** |
| 价格区间与操作 / 价格锚点 | **投资结论**（合并规则见下方"合并冲突处理"） |

**合并冲突处理**（针对"价格区间与操作 → 投资结论"等需要合并的映射）：

- 如果目标章节（投资结论）**不存在** → 直接把候选段改名为标准名
- 如果目标章节**存在但无价格区间表** → 把候选段的价格区间表追加到目标章节末尾
- 如果目标章节**存在且已有价格区间表**（结构相同） → 用候选段更新最新数据（保留最新版），删除候选段
- 如果目标章节**存在且已有价格区间表**（结构不同，例如锚点档位数量不一致） → **不自动合并**，dry-run 中预览两个表内容请用户决策（保留哪个/手动合并）

> 如果遇到映射表外的差异，dry-run 中标注"建议改名 X → Y，待用户确认"。**不擅自改映射表外的章节名**。

## 内容处理矩阵

| 类别 | 信号（必须 ALL 满足） | 操作 |
|---|---|---|
| **A. 被更新版本覆盖** | 1) 出现 v1/v2/v3 多轮迭代痕迹（"v1 估值 X"、"v2 修订为 Y"等明示文字）<br>2) 主体已有最新版 | **归档** v1/v2，保留最新版 |
| **B. 已触发的催化剂/跟踪信号** | 1) 含"等 X 验证"、"等 Y 披露"等表述<br>2) X/Y 事件已发生（页面其他章节有对应数据） | **归档**整段催化剂描述 |
| **C. 被新财报覆盖的旧季度数据** | 1) 主体已有 2026Q1（含完整营收/净利/毛利率/现金流）<br>2) 页面下方仍重复 2025Q3 同维度细节 | **归档** Q3<br>⚠️ 新季度未 cover 全部维度时**不归档** |
| **D. 被证伪的错误信息** | 1) 页面里有显式可见的"校核 note"，包含以下关键词之一：**"已修正" / "已删除" / "已证伪" / "校核未通过" / "口径冲突已解决"**（仅有 ⚠️ emoji 不算——⚠️ 在页面里也可能用于其他警示）<br>**或** 2) 旧错数据**及其证伪源**都在页面里同时出现（如旧值 + 新 verified 值同框，且文字明示替代关系）<br>**禁止仅凭 LLM 推测某数据有问题就归类为 D** | **直接删除**：<br>- 错误数据本身<br>- 包裹这条数据的整段"校核 note"（含标题、说明、bullet 项）<br>- ⚠️ 但保留**周边非校核的有效内容**（如同段还有别的真实信息，只挖掉错误部分）<br>git log 兜底 |
| **E. 仍是当前判断的内容** | 最新估值、当前价格区间、最新风险等 | **保留在主体**，按 value-invest 模板顺序排列 |

**关键区分**：
- **A/B/C 是"过去的有效判断"**——归档，便于回看决策演化
- **D 是"过去的错误"**——删除，避免附录变垃圾场，git log 已能追溯
- **「历史观察」只收 A/B/C，不收 D**

**安全保险**：D 类判定必须有 **页面内显式证据**（明文标注或 verified 值同框出现）。仅凭 LLM 推测"某数字看着不对" → **降级为待用户决策项，不自动删除**。

## 归档格式

页面末尾建立或追加 `## 历史观察（附录）` 章节，归档内容用 `<details>` 折叠：

```markdown
## 历史观察（附录）

> 本章节归档已被替代或已触发完成的内容，便于回看历史决策演化。所有内容默认折叠。

<details><summary>YYYY-MM-DD v1 估值（已被 v2 替代，原因：通用自动化毛利率年报 verified 39.42% vs 估算 30%）</summary>

[原内容]

</details>

<details><summary>YYYY-MM-DD 已触发的催化剂：Q1 季报存货验证</summary>

[原内容]

</details>
```

**`summary` 字段强制格式**：必须以 `YYYY-MM-DD` 开头，紧跟归档类型（v1 / 已触发 / 季度数据等）+ 一句话原因/替代源。例：`2026-04-27 v1 估值（已被 v2 替代，原因：...）`。日期前缀用于自动按事件日期排序。

**追加规则**：
- 如果页面已有「历史观察（附录）」章节 → 新归档项**插入到引导段（如有）之后、首个已有 `<details>` 之前**（即"最新在最上"）；如果章节内没有引导段（纯 details 列表），直接插入到首个 `<details>` 之前；不动已有项；**保留原引导段文字不覆盖**
- 如果没有 → 新建在页面真·最后位置（更新记录之后），使用本节示例中的引导段文字
- 排序口径：按 **summary 开头的 YYYY-MM-DD** 降序排列（不是 review 当天日期）。事件日期来自被归档内容的原始时间戳（如 v1 估值的创建日、催化剂触发日、季度数据所属季度）；如果原内容里没有可识别的日期，回退到 review 当天日期
- 本次 review 只调整本次新增项的位置，不重排已有归档项的相对顺序

> ⚠️ **错误信息（D 类）不在归档范围**——直接删除，不放入「历史观察」。

## 执行流程

### Step 1: 读取目标页面 + 现状评估

**章节边界判定**：以 `^## ` 开头的行作为章节起始，下一个 `^## ` 之前的所有内容（含子标题 `### `、表格、列表、`---` 分隔符）属于该章节。frontmatter（`---` 包围的 YAML）+ 文档总标题（`# `）不属于任何 `## ` 章节。

**适用范围检查**：先确认页面路径符合"适用范围"——如果是非 `wiki/stocks/**` 路径，立即退出并告知用户"本 skill 暂不支持该路径类型"。

读取 wiki 页面（用 Read 工具一次读完整全文，作为 Step 5 用 Write 整体覆盖的基线），输出：
- 总行数
- 现有章节列表（按出现顺序，列出每个 `## ` 标题 + 起始行号）
- frontmatter 状态（有 / 无 / `updated` 字段距今天数）
- 是否已存在「历史观察（附录）」章节

**早期退出条件**（必须**同时**满足以下全部才退出）：
- 页面 < 80 行
- **且** 章节顺序已对齐 value-invest 模板（无"顺序错乱"项）
- **且** 无命名映射差异（章节名都是模板标准名）
- **且** 页面正文搜索不到以下多版本关键词：`v1 估值` / `v2 修订` / `前版` / `已修正` / `已删除` / `已证伪` / `校核未通过` / `口径冲突`

满足以上 → 告知"页面已对齐且无过期内容，不需要 review"，停止。否则继续。

**隐式"基本信息"段处理**：很多页面在 H1 标题（`# 公司名 (代码)`）下直接列基本信息（市场/行业/市值），没有 `## 基本信息` 标题。这种"隐式段"保留在原位（H1 之后、首个 `## ` 之前），不动不重排。如果用户希望规范化为 `## 基本信息` 标题，dry-run 中标注请用户决定。

**显式与隐式基本信息共存**：极少数情况页面同时有"H1 下的隐式段"和"`## 基本信息` 显式章节"——dry-run 中标注，建议合并到显式章节，由用户确认。

### Step 2: 章节对齐 dry-run

对比页面现有章节 vs value-invest 模板顺序，输出四类差异：

| 类型 | 含义 | 操作 |
|---|---|---|
| 🔄 顺序错乱 | 章节存在但位置错 | 重排到目标位置 |
| ✏️ 命名差异 | 章节名是命名映射表里的旧名 | 改为映射表里的标准名 |
| ➕ 模板缺章 | value-invest 模板有的章节，页面缺 | **不主动新建**，只标注"页面缺该章节，建议跑 value-invest 补充内容"。即使用户在 dry-run 阶段说"补"，wiki-review 也不补内容（不产生新分析）——回应"请用 value-invest skill 补此章节" |
| ❓ 未识别章节 | 既不在模板也不在扩展列表 | 保留原位，dry-run 提示用户决策 |

**特殊处理**：
- `## 产品深度分析 (YYYY-MM-DD)` 章节由 stock-deep-dive 输出，**不重排不归档**，但在重排时把所有此类章节作为一个 block 整体放到位置 17（业务结构之后、相关链接之前）

### Step 3: 过期内容识别 dry-run

按"内容处理矩阵"A/B/C/D 扫描，分两个清单：

**待归档清单（A/B/C）**：

| # | 章节 | 内容摘要（前 60 字） | 归档类型 | 替代源（页面里指向哪段） |
|---|---|---|---|---|

**待删除清单（D，错误信息）**：

| # | 章节 | 内容摘要（前 60 字） | 显式证据（页面里的标注/同框 verified 值） |
|---|---|---|---|

**待用户决策清单（不确定项）**：

| # | 章节 | 内容摘要 | 困惑点 |
|---|---|---|---|

### Step 4: 输出完整 Dry-Run Plan

```markdown
## Wiki Review Plan: {页面路径}

### 现状
- 行数：{n}
- 章节数：{n}
- frontmatter：{有/无} {（如有）updated 距今 {n} 天}
- 「历史观察（附录）」章节：{已存在 / 不存在}

### 章节对齐（{n} 项变动）
| 章节 | 当前位置 | 目标位置 | 操作 |

### 过期内容归档（{n} 处，A/B/C 类）
| # | 章节 | 内容摘要 | 归档类型 | 折叠 summary |

### 错误信息删除（{n} 处，D 类）
| # | 章节 | 内容摘要 | 显式证据 |

### 命名修正（{n} 项，按映射表）
| 当前名 | 改为 |

### 不动的内容
- frontmatter 字段（仅更新 `updated`；缺失时不新建，等用户决定）
- 模板章节内的文字内容
- 「信息来源」章节（完全不动）
- 「更新记录」章节内容（仅在末尾追加一行 REVIEW 日志）
- ingest 数据（财报数字、历史事件、原始引用）
- stock-deep-dive 的 `## 产品深度分析 (YYYY-MM-DD)` 章节内容

### 待用户决策
- 未识别章节 {n} 处（列表）
- 模板缺章 {n} 处（列表，是否补齐）
- 不确定的 D 类候选 {n} 处（仅 LLM 推测无显式证据，建议保留）
- 重复章节 {n} 处（如两个 `## 风险提示`，列出来由用户决定合并/保留）
- 合并冲突 {n} 处（如「投资结论」与「价格区间与操作」结构不同，列出两边表内容由用户决策）
- frontmatter 缺失：{是否新建}
- 「更新记录」章节缺失：{是否新建}

---

**请回复确认或调整**，格式建议：
- "全部按 plan 执行"
- "执行重排和归档，但不动 D 类删除"（用户可选择性放弃某类操作）
- "改 X 项：{具体调整}"

> 用户可以选择性放弃某类操作（如不删 D 类只重排），但**不能改变操作类型本身**——例如不能要求"把 D 类错误信息改为归档而不是删除"，因为这违反 skill 的硬约束（D 类必删）。如有此类要求，回应"该操作违反 wiki-review 硬约束，建议手动处理"。
```

**等用户明确确认后才进入 Step 5**。如有疑议，按用户指示调整后再次输出 plan，直到用户说"执行"。

**用户拒绝 plan 时**：终止 skill，输出 `已取消，未对 {页面路径} 做任何修改`。不留下任何半成品状态。

### Step 5: 执行修改

**默认用 Write 整体覆盖**。仅当本次改动 ≤ 3 处独立编辑点（如只有 1-2 个命名修正、无重排）时才考虑 Edit。理由：重排涉及多章节移动，多次 Edit 中间状态易出错。

**Step 5.0：二次 Read 确认**

再次 Read 一次目标文件，对比 Step 1 时的快照。如有变化（用户在交互期间手动改了文件、或外部 hook 修改） → 重新做 Step 2-4 dry-run，不可基于过期快照执行。

**Step 5.1：构造完整新版本页面文本**（基于刚 Read 的全文）

1. 先抽取每个章节的整段内容（按章节边界规则切片）
2. 检测**重复章节**（如页面里有两个 `## 风险提示`）→ dry-run 已询问用户，按用户决策合并/保留
3. 按"完整目标章节顺序"表拼接：
   ```
   frontmatter（更新 updated）
   → 文档 H1 大标题
   → 隐式基本信息段（如有）
   → 各 ## 章节按目标顺序（执行命名映射、A/B/C 归档移出、D 类删除、合并冲突按规则处理）
   → 历史观察附录（含本次新增 + 已有，按事件日期降序）
   ```
4. 在拼接到「更新记录」章节时追加 REVIEW 日志行（**只列出本次实际发生的操作，操作数为 0 的部分跳过**）：
   ```
   - YYYY-MM-DD REVIEW {仅列实际发生项，例如：}重排 5 章节 + 归档 2 处过期内容 + 改名 1 处章节
   ```
   完整候选片段：`重排 X 章节 / 归档 Y 处过期内容 / 删除 Z 处错误信息 / 改名 W 处章节`

**Step 5.2：写入文件**

用 Write 工具**一次性整体覆盖**原文件。

**Alternative：小改动场景用 Edit**（仅当 ≤ 3 处独立编辑点且无章节重排时）：
- 先做命名修正（最安全）
- 再做 D 类删除（独立段落）
- 再做 A/B/C 归档（先抽出原内容，再追加到附录，最后删除原位置）
- 章节重排不要用 Edit，必用 Write

**边界处理**：
- frontmatter 不存在且用户同意新建 → 按 wiki 标准格式新建：`tags: [...] / updated: YYYY-MM-DD`
- 「更新记录」章节不存在且用户同意新建 → 按 wiki 标准格式新建（追加在「信息来源」之后、「历史观察」之前）
- 重复章节（如两个 `## 风险提示`）→ 按 dry-run 用户决策合并或保留
- 「投资结论」与「价格区间与操作」并存 → 按命名映射表"合并冲突处理"规则执行

### Step 6: 收尾

- chat 输出 diff summary，只列实际发生的操作（操作数 0 的项跳过）
- 提示用户用 `git diff wiki/path/to/page.md` 复核

## 与其他 skill 的边界

| skill | 范围 | 与 wiki-review 区别 |
|---|---|---|
| value-invest | 估值分析（产生新内容） | wiki-review 只整理已有内容 + 对齐其模板 |
| stock-deep-dive | 业务深度（产生新内容，带日期独立章节） | wiki-review 不动其章节，整体作为 block 放到位置 17 |
| periodic-review | 跨多个 focus 个股的市场复盘 | 跨页面 vs 单页面 |
| CLAUDE.md 里的 LINT 工作流 | 全 wiki 健康度扫描（未具象化为 skill） | 跨页面 vs 单页面 |

## 协议：value-invest 模板是 source of truth

如果未来 value-invest 模板章节顺序/命名变化，**wiki-review 应跟随**，而不是相反。建议在 value-invest SKILL.md 加一行注释，提醒模板修改时同步检查 wiki-review 的"Source of Truth"章节与"命名映射表"。

## 输出位置

直接修改原 wiki 文件。不生成独立 report 文件。

