feat: 增加项目无关的本地清洗评审器

This commit is contained in:
2026-08-28 19:06:10 +08:00
parent 10c026c7ad
commit 6c0dd5974b
82 changed files with 9335 additions and 48 deletions
+44 -4
View File
@@ -18,12 +18,19 @@
ReviewDocument
├── render_markdown_report() ─────────────► 内存 Markdown 字符串
└── review_document_to_dict(detail=...)
└── review_document_to_dict(detail=...)
├───────────────────────────► 项目自己的界面或转换层
└── render_json_report() ──► 内存 JSON 字符串
parse_json_report()
本地只读 reviewer 页面
```
文件读取、保存位置、HTML 页面、权限和审核流程仍由调用项目决定。
清洗输入读取、报告保存位置、权限和审核流程仍由调用项目决定。项目可以把正式 `full` JSON 保存到自己的目录,再显式启动
`mdpolish-reviewer`;通用页面不替项目生成、命名或清理这些文件。
## 2. 构建过程为什么可以失败关闭
@@ -111,5 +118,38 @@ modifier 参数、位置和哈希,并在根对象写入 `schema_name=mdpolish.
拒绝 NaN / Infinity,不写文件或添加 BOM。Markdown reporter 继续直接读取 `ReviewDocument`:它面向人类排版并包含 diff、
动态围栏和 residual 展示限额,不依赖机器 schema。
机器投影只生产,不提供 JSON 到 `ReviewDocument` 反序列化,也不能用于重新应用修改。完整字段、坐标、错误代码和兼容规则
见 [`review-projection-schema-v1.md`](../reference/review-projection-schema-v1.md)。
`parse_json_report()` 读取内存 JSON 字符串,返回新的普通 dict/list 容器。它不是 `ReviewDocument` 反序列化,也不能用于
重新应用修改。三个 detail 都会检查字段、枚举、引用、顺序、计数和正文暴露边界;只有 `full` 带有完整阶段文本,因此还能
验证所有正文哈希、阶段链、Change 原文和行列,并使用 `edits.py` 的同一套精确编辑原语重放每个阶段。重放结果不等于
stage after 时直接抛出 `ReviewParseError`,不会因为攻击者同时更新正文和声明哈希就接受伪造阶段。
schema 同一 major 的未知 object 字段不改变已有字段解释;未知 major、detail、状态、坐标契约或 enum 会被拒绝。解析错误只
说明字段路径和契约类别,不复制正文、参数、reason 或诊断消息。
完整字段、坐标、错误代码、读取保证和兼容规则见
[`review-projection-schema-v1.md`](../reference/review-projection-schema-v1.md)。
## 7. 本地页面为什么仍然保持项目无关
本地 reviewer 只接受用户明确传入的一个目录,并读取其中直属的 `*.review.json`。它从文件名派生保守的页面标签,不读取
原始 Markdown 路径、项目 manifest、默认流水线或业务状态。Python 服务负责正式 JSON 校验和码点到 UTF-16 的只读定位,
React 页面只消费同源内部 API。
```text
项目保存的 full JSON
官方 reader:验证 schema、哈希、阶段和 Change
127.0.0.1 上的只读 API
文档列表 ── Modifier 时间线 ── 双栏源码比较 ── Change 跳转
```
`editor_range` 只用于 CodeMirror 选择和滚动。正式 span 仍是所属 `stage.before.markdown` 中的 Python 码点半开范围,不写回
JSON,也不变成新的审计权威。
服务只绑定回环地址,只接受 `GET` / `HEAD`,校验 Host 和 Origin,不开放 CORS,也没有写入、重新清洗、上传或 shell 接口。
页面不渲染 Markdown 和 HTML,不加载图片或外部资源。它展示的是清洗证据,不记录批准、拒绝、批注或审核结论。