vault-lint · git:20260728.634c4b7 · 2026-07-28 · sha256 bd47c2b1eedacbc7
vault-lint git:20260728.634c4b7A
Immutable. This exact content never changes and is served at /api/v1/blob/bd47c2b1eedacbc7.
--- name: vault-lint description: > 当 Supervisor 说"体检一下 vault""检查笔记质量""跑一下 lint",或 autoresearch 例行触发 (距上次 lint >7 天、或本周批量 digest ≥10 篇、或建站前)时,对 vault 内容目录跑机械 质量检查:frontmatter YAML、cite_key 完整性、wikilink 失链、abstract-only 笔记、 Quartz 建站隐患(字面 $、引号嵌套)、模板残留。 argument-hint: "[--build 附带建站冒烟] [--check yaml/cite-key/wikilink/abstract/dollar/placeholder]" allowed-tools: Read, Edit, Glob, Grep, Bash --- # Vault Lint — 把踩过的坑固化成机械检查 ## Purpose vault 里反复出现过几类机械故障(见 Workbench/memory):cite_key 留空 `""` 被 assign_cite_keys 静默跳过导致丢引用身份、abstract-only 低质笔记滞留、frontmatter 引号/ 字面 `$` 弄挂 Quartz build、改名后 wikilink 失链。过去都是事后手工修——本 skill 用 `vault_lint.py` 把它们变成可定期跑的机械检查 + 分类处置流程,问题在积累前被清掉。 ## Steps ### Step 1:跑检查 ```bash python3 skills/5-evolution/vault-lint/vault_lint.py # 常规 python3 skills/5-evolution/vault-lint/vault_lint.py --build # 建站前(附 quartz build 冒烟) ``` 退出码 0 = 无 ERROR。输出按检查类分组(ERROR 必须处置,WARN 需 triage)。 ### Step 2:分类处置 | 检查类 | 处置方式 | |:--|:--| | `[yaml]` | 机械修:字段值加引号 / string 改 list。修完重跑确认 | | `[cite-key]` | **只经脚本修**:先按提示删 `""` 引号陷阱(`sed 's/^cite_key: ""$/cite_key:/'`),再跑 `assign_cite_keys.py`;批量新分配后补跑 `fetch_bibtex.py --offline` 或分批在线抓取(注意 arXiv 限速)。禁止手编 cite_key | | `[wikilink]` | 逐条 triage:目标改名/合并 → 更新链接指向新名(如 merged survey 指向 canonical);目标确实不存在 → 修正或删除链接。survey 正文出现 memory slug 等内部痕迹链接 = 违反写作基线第 9 条,一并清除 | | `[abstract]` | 按既定规则:**无入链 → 列删除候选清单给 Supervisor 确认**(不直接删);**有入链 → 进 queue 重抓全文 re-digest**(arxiv/html → ar5iv 顺序) | | `[dollar]` | 逐文件甄别:散文里 $+数字恒为货币 → 整行转义 `\$`;Papers 数学货币混杂 → 逐处判断,数学公式保留 | | `[placeholder]` | 补写或删除残留 `%%` 注释 / `[TODO]`;abstract-only 导致的空节按 `[abstract]` 规则走 | ### Step 3:复跑验证 处置完成后重跑 Step 1,确认 ERROR = 0;仍留的 WARN 必须每条有 triage 结论 ("保留,因为…")。 ### Step 4:记录 追加到 `Workbench/logs/YYYY-MM-DD.md`: ```markdown ### [HH:MM] vault-lint - **scan**: N files | E errors / W warnings - **fixed**: <cite-key N 篇 / wikilink N 处 / yaml N 处 / …> - **pending**: <删除候选 N 篇待 Supervisor 确认 / re-digest 入 queue N 篇 / 无> - **status**: clean / residual-warns ``` ## Guard - **只修机械问题,不改内容语义**:lint 不重写笔记正文、不调整结论、不动 rating。 - **cite_key 修复只经 `assign_cite_keys.py`**——不手编 key(key 一旦写入永久冻结, 手编会破坏碰撞解析)。 - **abstract-only 笔记不直接删**:删除候选列清单给 Supervisor / 进 queue review, 确认后才删;有入链的一律走重抓全文,不删。 - **$ 转义前必须甄别**:Papers 数学与货币混杂,不做整目录盲替换。 - 修复用 Edit / 既有脚本;不引入新的批量改写脚本。 ## Verify - [ ] `vault_lint.py` 复跑退出码 0(ERROR = 0) - [ ] 残余 WARN 每条有 triage 结论记录在日志 - [ ] cite-key 修复后抽查 2-3 篇:frontmatter `cite_key` 非空且未改动既有 key - [ ] 删除候选/re-digest 清单已交 Supervisor 或入 queue(未擅自删除) - [ ] 日志 entry 四项齐全 ## Examples `/vault-lint` → 1014 files,174 ERROR(163 篇 `""` 陷阱 + 11 篇缺失)→ sed 清陷阱 + assign_cite_keys 批量分配 → 复跑 0 ERROR,18 WARN(16 失链逐条 triage + 2 模板残留补写)。