Files
obsidian-wiki/docs/upstream-sync.md
T
Codex e943bb329e
setup / install-leaves-tree-clean (push) Waiting to run
feat(wiki): port upstream knowledge quality improvements
Selectively port source coverage and redirect lint, ignore-aware provenance, staging and trust checks from upstream 055d720. Preserve local archive metadata and adapt source-date and defuddle skill guidance.

Keep the existing skills directory, file index and MCP interfaces. Record per-module upstream baselines and exclusions without migrating vault data or changing services.

Validation: 625 tests passed; git diff --check passed.
2026-11-07 21:49:41 +00:00

68 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 上游关键更新同步
## 2026-11-07:Wiki 质量增量同步
基于上次 v2026.10.4 移植,选择性同步到上游提交 [`055d720`](https://github.com/Ar9av/obsidian-wiki/commit/055d720950f7137954e36633b1a79c641ea5e735) 中的质量相关改动,不表示追平整个主分支。
- 来源覆盖检查:发现 manifest 中明确没有产出页面、或产出页面已全部丢失的来源;兼容列表/字典清单及旧版仅记录数量的条目。
- 重定向检查:合并后留下的跳转页不再误报重复标题/文件名;报告目标丢失、自引用和重定向链。
- 忽略规则:归档快照核对、URL 来源索引、暂存列表及信任记录检查遵守 `.okignore`;保留本地 `_sources/archive` / `_sources/catalog` 引用适配。
- 入库时间信息:新增页面可从来源自身日期填写 `valid_from`;本地归档资料使用原文件名/元数据,避免误用归档月份、mtime 或哈希前缀。已有页面只允许提前已有的有效日期,不批量回填历史知识。
- 网页正文提取:修正本地 ingest-url 与 wiki-research 中的 `defuddle parse <url> --markdown` 调用。
按本次范围保留 `.skills/`、安装配置、文件索引、MCP 和现有服务。上游自身仍有 HTTP/MCP 服务,本地 MCP 在订单功能剥离后仍支持文件检索、Wiki 入库与问答,因此“上游没有 MCP 时删除”的条件不成立。本次不引入上游服务、GraphRAG、会话 hooks 或新增技能,也不执行实际知识库迁移。
新增回归覆盖来源丢失、重定向、忽略规则、暂存目录软链接、本地归档字段保留和 CLI 严格模式。完整回归结果:**625 项测试通过**(`PYTHONPATH="$PWD" .venv/bin/python -m pytest tests -q`);`git diff --check` 通过。测试使用临时知识库,本次没有写入实际 vault,也未启动、停止或重新配置服务。
后续比较采用 `upstream-sync.json` 的 `quality_sync` 五个模块哈希;未变化模块沿用最初基线。技能为按语义移植,不可整体覆盖。
## 2026-10-31:初始核心维护同步
本次选择性同步 [Ar9av/obsidian-wiki v2026.10.4](https://github.com/Ar9av/obsidian-wiki/releases/tag/v2026.10.4),固定提交 `4f457e154653756b04802d5aeb25c20f42b4770c`。这是核心维护能力的移植,不表示本分支完整等同于该版本。来源哈希、移植的 CLI 函数和未纳入的测试范围记录在 `upstream-sync.json`。
| 纳入能力 | 实际作用 |
| --- | --- |
| `cache-check` / `cache-update` / `cache-hash` | 用内容哈希识别变化;manifest 锁和原子写入;兼容列表/字典及旧哈希格式 |
| `projects-check` | 按已记录提交检查项目资料是否落后 |
| `memory` | 统一维护 index、log、hot;提供只读检查、显式迁移及备份 |
| `lint` / `graph-analyse` | 正确区分不同项目中的同名页,解析相对链接,忽略代码示例里的伪链接;检查结构、时效与来源信息 |
| `staging` | 暂存晋升前校验已审阅的 staged/live 内容哈希;冲突时退出并保留文件 |
同步了 `llm-wiki`、`wiki-ingest`、`wiki-lint`、`wiki-stage-commit` 的相关执行指引,详细协议见 `.skills/llm-wiki/references/CORE-MAINTENANCE.md`。图分析是显式调用的维护工具,不接入远程问答或自动调度。
## 本地兼容
- 保留 `~/.obsidian-wiki/config`、现有 setup、file-index、bot-view 和 MCP 命令。
- 保留 `_sources/archive` / `_sources/catalog`、原文件索引、结构化产品字段及 ACL。知识页遍历排除原始资料、元数据、收件箱和导出副本;归档文件仍可被引用。
- `cache-update` 未传 `--pages` 时保留已有页面关联;显式传入时替换 `pages_produced`。自定义元数据需在同一个 manifest 锁内读取、合并并原子写回。registry 和 SQLite 索引仍由本地 ingest 流程维护。
- 未改动已有知识页面、manifest、registry、SQLite 或 index/hot;未启动 Wiki MCP,未修改独立订单项目。
- 未导入上游 HTTP 服务、MCP 2.x 依赖、会话 hooks、session brain、GraphRAG 查询链路或全量数据迁移。
## 使用与迁移
从本项目虚拟环境执行,避免误用系统中另一个版本:
```bash
.venv/bin/python -m obsidian_wiki lint /path/to/vault --json
.venv/bin/python -m obsidian_wiki memory status --vault /path/to/vault --json
.venv/bin/python -m obsidian_wiki memory migrate --vault /path/to/vault --json
.venv/bin/python -m obsidian_wiki staging list --vault /path/to/vault --json
```
这些检查不重写知识库。`memory migrate` 默认只预览;只有明确决定迁移数据格式后才加 `--apply`,届时先备份旧 index/hot。未迁移的库继续保留现有布局,使用共享锁合并必要修改。框架升级本身不触发该迁移。
lint 的旧库模式把 trust ledger 缺失等问题报告为警告。若以后启用严格审阅,需要独立设计实际审阅流程,不能为了消除警告伪造置信度。自定义归档目录可加入 `.okignore`,其非标准引用需单独核查。
## 验证与下次同步
```bash
uv sync --extra mcp --group dev
PYTHONPATH="$PWD" .venv/bin/python -m pytest tests -q
```
测试包括原有文件检索、ACL、MCP query/ingest 和运维回归,以及本次核心模块的上游测试;另有本地兼容测试验证归档排除、引用解析与 manifest 字段保留。测试使用临时知识库,不启动实际服务。
本次验证结果:**609 项测试通过**。实际知识库只执行了 `memory status` 只读检查,index/hot/log、manifest、registry、SQLite 的前后 SHA-256 一致。Wiki MCP 保持 inactive,独立订单 MCP 保持 active。
初始同步以 `upstream-sync.json` 的提交和源文件哈希作比较基线,逐模块检查新提交,再重放列出的本地适配。不要直接覆盖 `.skills`、运行上游 setup、切换服务依赖或批量改写知识库。上游未纳入模块的测试明确列入排除清单,不能把它们的缺席解释为整版上游已通过验证。