vscode-templete/.claude/skills/auto-wiki-cn/references/lint-protocol.md

231 lines
9.4 KiB
Markdown
Raw Normal View History

# Lint 协议
> Lint 不只是检查问题,更重要的是**治理**——合并、归档、修复。防止 wiki 变成信息坟场。
## 流程
```
1. 扫描全部页面
├─ 读 meta.yaml 获取 wiki 基本信息
├─ 读 index.md 获取页面列表
├─ 遍历 sources/ entities/ concepts/ analyses/ 目录
└─ 对比 index 与实际文件(发现 index 遗漏或多余的条目)
2. 逐项检查7 项)
├─ 2.1 Validation — 页面格式是否合规
├─ 2.2 Contradiction — 不同页面之间是否有矛盾
├─ 2.3 Duplication — 是否有重复页面
├─ 2.4 Orphan — 是否有孤立页面
├─ 2.5 Broken Link — 是否有断链
├─ 2.6 Staleness — 是否有过时内容
└─ 2.7 Coverage — 知识覆盖是否有明显缺口
3. 执行修复(自动 + 需确认)
├─ 自动修复index 同步、断链修复、格式补全
└─ 需确认:合并重复、归档过时、矛盾标注
4. 输出健康报告
5. 更新 meta.yaml 统计
6. 追加 log.md
```
## 两档执行
Lint 分两档。结构化检查可以自动跑完全量页面,语义检查需要 Agent 逐页理解内容,代价随页面数线性增长。
| 档位 | 包含检查项 | 执行方式 | 代价 |
|------|-----------|---------|------|
| **结构档**(必跑) | Validation, Orphan, Broken Link, Staleness | 全量扫描,确定性输出 | O(N) 文件读取 |
| **语义档**(按需) | Contradiction, Duplication, Coverage | Agent 抽样或用户指定范围 | O(N²) 语义比较 |
**默认行为**`lint` 只跑结构档。用户说"深度 lint"或"检查矛盾"时跑语义档。
**语义档的范围控制**
- wiki < 50 全量扫描
- wiki 50-200 页:只扫最近 30 天内 ingest 触及的页面 + 其关联页面
- wiki > 200 页:用户必须指定范围(如"检查 entities/ 下的矛盾"
---
## 7 项检查细则
### 2.1 Validation格式校验— 结构档
按 wiki-format.md 的 Validation Rules 检查每个页面:
| 规则 | 自动修复? |
|------|-----------|
| frontmatter 缺字段 | 是 — 补充默认值type=entity, confidence=medium |
| type 值非法 | 否 — 报告,等用户确认 |
| sources 为空(非 source 类型) | 否 — 报告,建议关联 |
| slug 与文件名不一致 | 否 — 报告 |
| 日期格式错误 | 是 — 尝试自动修正 |
### 2.2 Contradiction矛盾检测— 语义档
扫描实体页和概念页,检查:
- 同一事实在不同页面有不同数值/结论
- 同一实体页内有 `contested` 标注——检查是否有新 source 可以解决
```
发现矛盾:
- alpha-corp.md 说管理规模 1200 亿来源2026-policy-doc
- industry-overview.md 说某机构市场份额对应约 1000 亿来源industry-report-2025
→ 标注两个页面 confidence → contested
```
### 2.3 Duplication重复检测— 语义档
检查是否有两个页面描述同一个实体/概念:
- 文件名相似(如 `alpha-corp.md``alpha-annuity.md`
- 标题相似
- 正文内容重叠度高
**处理**:合并为一个页面,保留更完整的版本,将另一个的独有信息合并进来。需用户确认。
### 2.4 Orphan孤页检测— 结构档
页面没有任何入链(没有别的页面通过 `[[slug]]` 引用它)。
**处理**
1. 检查是否有应该引用它的页面 → 是 → 添加 wikilink
2. 仍然无关联 → 建议归档或删除
### 2.5 Broken Link断链检测— 结构档
页面中有 `[[slug]]` 但对应文件不存在。
**处理**
1. 如果能推断应该是哪个页面slug 拼写接近)→ 修正 wikilink
2. 否则 → 创建 stub 页面(只有 frontmatter + "待补充"),或移除断链
### 2.6 Staleness过时检测— 结构档
| 条件 | 判定 |
|------|------|
| 页面 `updated` 距今 > 6 个月,且 confidence ≤ medium | 过时候选 |
| 页面的所有 sources 都 > 12 个月 | 过时候选 |
| 页面 confidence 为 low 且从未被 ingest 强化过 | 过时候选 |
**处理**:标注"待验证"或建议归档。不自动删除。
### 2.7 Coverage覆盖度评估— 语义档
不是找错误,而是找缺口。分 5 类检测:
#### Gap-1: Page Missing页面缺失
被其他页面通过 `[[slug]]` 引用但实际文件不存在。与 Broken Link 不同——Broken Link 是链接拼写错误Page Missing 是知识本身缺失。
- 检测:遍历所有 wikilink找到指向不存在页面的引用
- 判定3+ 个页面引用同一个不存在的 slug → 不是拼写错误,是知识缺口
- 输出:`{ gap_type: "page_missing", slug: "xxx", referenced_by: [...] }`
#### Gap-2: Concept Missing概念缺失
多个实体页面反复提到同一术语/概念,但没有独立的概念页解释它。
- 检测:在 entities/ 正文中提取高频术语,检查 concepts/ 中是否有对应页面
- 阈值:某术语在 3+ 个不同页面出现但无独立概念页 → 缺口
- 输出:`{ gap_type: "concept_missing", term: "xxx", mentioned_in: [...] }`
#### Gap-3: Data Missing数据缺失
实体页面提到某个指标但 data.db 中没有对应数值,或数值缺少关键维度(没有 period、没有来源
- 检测:扫描页面正文中的指标名称,交叉检查 data.db
- 输出:`{ gap_type: "data_missing", page: "xxx", field: "xxx" }`
#### Gap-4: Single Source来源单一
页面 confidence 依赖唯一来源,且该来源不是一手/权威来源。
- 检测sources 列表长度 = 1 且 source_type 不是"一手"或"二手·权威"
- 输出:`{ gap_type: "single_source", page: "xxx", current_source: "xxx" }`
#### Gap-5: Outdated过时待更新
与 Staleness 不同——Staleness 标注过时候选Outdated 侧重数据已有更新时点但 wiki 未跟上。
- 检测data.db 中数据的 period 距今 > 12 个月,且该领域通常有年度更新
- 输出:`{ gap_type: "outdated", page: "xxx", field: "xxx", last_period: "xxx" }`
#### Gap-6: Validator Gap校验器缺口— 仅当 wiki 声明了 validator 时
如果 meta.yaml 声明了 `seed` 且对应种子文件指向了 `validator`Coverage 额外运行校验器检查:
- 检测:调用校验器(如 FIBO SPARQL查询实体类型的必要关系`someValuesFrom` 约束),对比 wiki 中已建立的关系
- 示例FIBO 说 PensionFund 必须有 Trustee 关系wiki 中该实体页缺了这条关系 → 缺口
- 输出:`{ gap_type: "validator_gap", page: "xxx", missing_relation: "hasTrustee", standard: "FIBO" }`
- 降级:校验器不可达时静默跳过,在报告中注明"外部校验器不可达,已跳过"
这一类缺口检测的不是"信息缺失",而是"逻辑不完整"——你说这是一个 PensionFund但按行业标准定义它至少还需要管理人、托管人、监管方。
#### 覆盖度启发式(补充)
以上 6 类之外,保留原有启发式检查:
- 某个实体被 5 个其他页面引用,但自身内容很薄(< 100 )→ 建议深化
- 某个类型(如 concepts/)页面很少,但 entities/ 页面很多 → 建议提炼概念
- source 页面多但 analysis 页面少 → 建议做综合分析
## 健康报告格式
```
## Wiki 健康报告:{主题名}
生成时间:{日期}
### 概况
- 页面总数42sources: 12, entities: 15, concepts: 10, analyses: 5
- 健康度:良好 / 需要关注 / 需要干预
- confidence 分布high 30 / medium 8 / low 2 / contested 2
### 本次修复
- [自动] index.md 同步(新增 2 个遗漏条目)
- [自动] 修复 1 个断链portable-annuity → portable-annuity-scheme
- [需确认] 合并 alpha-corp.md 和 alpha-annuity.md疑似重复
### 待处理问题
- 矛盾2 处(列出具体页面和矛盾点)
- 过时1 页建议归档portfolio-category6 个月未更新)
### 覆盖度建议
- entities/beta-corp.md 内容较薄(仅 50 字),被 4 个页面引用,建议 ingest 更多材料
- concepts/ 只有 10 页,而 entities/ 有 15 页,建议提炼更多概念页
### 统计
- 最活跃 sourcehrss-2026-policy被 8 个页面引用)
- 最孤立 entityportfolio-category0 个入链)
- 最近 ingest2026-04-063 天前)
```
## 缺口报告格式(供 deep-dive 使用)
当 Coverage 检查由 deep-dive 触发时,除健康报告外还输出结构化缺口报告:
```
## Gap Report: {topic}
Generated: {date}
Scope: {全量 | 指定范围}
### Gaps Found: {N}
| # | Category | Target | Detail | Priority | Search Direction |
|---|----------|--------|--------|----------|------------------|
| 1 | page_missing | portable-annuity | 被 4 个页面引用 | high | 搜索"可携带企业年金 政策" |
| 2 | concept_missing | 受托人资格 | 在 5 个实体页中提到 | high | 搜索"企业年金受托人资格 要求" |
| 3 | single_source | alpha-corp | 仅有来源: industry-report-2025 | medium | 搜索"Alpha Corp 养老金 年报" |
### Priority Rules
- high: page_missing3+ 引用、concept_missing5+ 提及)
- medium: single_source、data_missing
- low: outdated数据年龄 12-24 个月)
```
### 范围控制deep-dive 场景)
deep-dive 触发时Coverage 接受可选范围参数:
- `deep-dive {topic}` → 限定在指定 wiki
- `deep-dive {topic} entities/` → 限定在子目录
- `deep-dive {topic} --max-gaps N` → 限制最大缺口数(默认 10
- 无范围指定时,按语义档的范围控制规则执行(<50 页全量50-200 页近 30 >200 页要求指定)