精简 README 当前阶段为能力清单并同步协作规则

README 把逐条流水账式进度改为当前能力与边界概述:已实现内存核心、
唯一组件 paper.arxiv_submission_stamp 和 87 项测试;进度细节交由
design 与带日期的 scratch 记录。补充测试数据来源说明和展开的目录
结构。AGENTS/CLAUDE 同步:阶段描述改为指向 README 唯一权威,定位
改为实验室共用库;正文镜像保持一致。gitignore 忽略 .claude/scratch。
This commit is contained in:
2026-08-22 15:59:30 +08:00
parent 48dd02ce1d
commit 6548f0f486
4 changed files with 64 additions and 74 deletions
+1
View File
@@ -5,6 +5,7 @@ __pycache__/
.pytest_cache/ .pytest_cache/
.mypy_cache/ .mypy_cache/
.ruff_cache/ .ruff_cache/
.claude/scratch/
dist/ dist/
build/ build/
*.egg-info/ *.egg-info/
+7 -7
View File
@@ -1,9 +1,9 @@
# AGENTS.md # AGENTS.md
> [!IMPORTANT] > [!IMPORTANT]
> **当前是文档治理基础阶段,不是已实现的清洗工具。** > **当前阶段与已实现范围只以根目录 `README.md` 为准。**
> >
> 1. 本仓库研究政务文档 PDF→Markdown 清洗问题;当前没有可运行实现 > 1. 本仓库是实验室共用的 Markdown 清洗研究与基础工具库;已有实现不等于完整清洗工具或生产能力
> 2. 真实文档和外部数据默认只读,不修改、不复制、不提交。 > 2. 真实文档和外部数据默认只读,不修改、不复制、不提交。
> 3. 面向用户的说明使用简体中文;代码、命令、路径和标识符使用英文。 > 3. 面向用户的说明使用简体中文;代码、命令、路径和标识符使用英文。
> 4. `AGENTS.md` 与 `CLAUDE.md` 是同步镜像,除第一行标题外正文必须一致。 > 4. `AGENTS.md` 与 `CLAUDE.md` 是同步镜像,除第一行标题外正文必须一致。
@@ -28,11 +28,12 @@
## 1. 项目定位与当前阶段 ## 1. 项目定位与当前阶段
`mdpolish`独立的清洗算法研究与治理仓库。它用于理解 PDF→Markdown 噪音、定义清洗边界、 `mdpolish`实验室共用的 Markdown 清洗研究与基础工具库。它用于理解 PDF、DOCX、OCR、网页等上游管线
比较候选方案并积累可复核证据。 生成的 Markdown 噪音,定义清洗边界,比较候选方案并积累可复核证据。
当前只建立文档治理基础。源码目录、测试目录、依赖配置、命令行接口、规则格式和评估体系均未获批准、 当前阶段、已经完成的工作和实际能力边界只查阅根目录 `README.md`,不在本文件维护第二份进度清单。
也未实现。不得因为 README 中描述了目标,就把目标写成已经存在的能力。 源码目录、测试目录、依赖配置、命令行接口、规则格式和评估体系都必须先经对应 design 批准后才能建立或改变;
已经存在某个核心接口或单项组件,不表示完整规则集、文件适配、CLI、profile 或生产接口已经实现。
本仓库的研究结论不会自动成为其他仓库的生产契约。跨仓落地必须在目标仓库重新评审并获得授权。 本仓库的研究结论不会自动成为其他仓库的生产契约。跨仓落地必须在目标仓库重新评审并获得授权。
@@ -127,4 +128,3 @@ design 草稿可以在评审中修改;批准后冻结。决策发生变化时
- 能在授权范围内安全判断的事项直接完成;会改变范围或契约的选择交给用户; - 能在授权范围内安全判断的事项直接完成;会改变范围或契约的选择交给用户;
- 进度和最终报告必须对应真实工具输出,不把计划描述成结果; - 进度和最终报告必须对应真实工具输出,不把计划描述成结果;
- 不输出内部思维链,只提供可复核的依据、实际变更和验证结果。 - 不输出内部思维链,只提供可复核的依据、实际变更和验证结果。
+7 -7
View File
@@ -1,9 +1,9 @@
# CLAUDE.md # CLAUDE.md
> [!IMPORTANT] > [!IMPORTANT]
> **当前是文档治理基础阶段,不是已实现的清洗工具。** > **当前阶段与已实现范围只以根目录 `README.md` 为准。**
> >
> 1. 本仓库研究政务文档 PDF→Markdown 清洗问题;当前没有可运行实现 > 1. 本仓库是实验室共用的 Markdown 清洗研究与基础工具库;已有实现不等于完整清洗工具或生产能力
> 2. 真实文档和外部数据默认只读,不修改、不复制、不提交。 > 2. 真实文档和外部数据默认只读,不修改、不复制、不提交。
> 3. 面向用户的说明使用简体中文;代码、命令、路径和标识符使用英文。 > 3. 面向用户的说明使用简体中文;代码、命令、路径和标识符使用英文。
> 4. `AGENTS.md` 与 `CLAUDE.md` 是同步镜像,除第一行标题外正文必须一致。 > 4. `AGENTS.md` 与 `CLAUDE.md` 是同步镜像,除第一行标题外正文必须一致。
@@ -28,11 +28,12 @@
## 1. 项目定位与当前阶段 ## 1. 项目定位与当前阶段
`mdpolish`独立的清洗算法研究与治理仓库。它用于理解 PDF→Markdown 噪音、定义清洗边界、 `mdpolish`实验室共用的 Markdown 清洗研究与基础工具库。它用于理解 PDF、DOCX、OCR、网页等上游管线
比较候选方案并积累可复核证据。 生成的 Markdown 噪音,定义清洗边界,比较候选方案并积累可复核证据。
当前只建立文档治理基础。源码目录、测试目录、依赖配置、命令行接口、规则格式和评估体系均未获批准、 当前阶段、已经完成的工作和实际能力边界只查阅根目录 `README.md`,不在本文件维护第二份进度清单。
也未实现。不得因为 README 中描述了目标,就把目标写成已经存在的能力。 源码目录、测试目录、依赖配置、命令行接口、规则格式和评估体系都必须先经对应 design 批准后才能建立或改变;
已经存在某个核心接口或单项组件,不表示完整规则集、文件适配、CLI、profile 或生产接口已经实现。
本仓库的研究结论不会自动成为其他仓库的生产契约。跨仓落地必须在目标仓库重新评审并获得授权。 本仓库的研究结论不会自动成为其他仓库的生产契约。跨仓落地必须在目标仓库重新评审并获得授权。
@@ -127,4 +128,3 @@ design 草稿可以在评审中修改;批准后冻结。决策发生变化时
- 能在授权范围内安全判断的事项直接完成;会改变范围或契约的选择交给用户; - 能在授权范围内安全判断的事项直接完成;会改变范围或契约的选择交给用户;
- 进度和最终报告必须对应真实工具输出,不把计划描述成结果; - 进度和最终报告必须对应真实工具输出,不把计划描述成结果;
- 不输出内部思维链,只提供可复核的依据、实际变更和验证结果。 - 不输出内部思维链,只提供可复核的依据、实际变更和验证结果。
+48 -59
View File
@@ -12,41 +12,16 @@ profile 表达论文、政务文档、RAG、文档对比等不同需求。
## 当前阶段 ## 当前阶段
2026-08-20 已完成仓库重置与最小文档治理骨架 项目当前已经进入第一版可执行核心和真实组件验证阶段
- 原有 Python 实现、YAML 规则、测试和打包配置已经移除 - 提供可安装的 Python 3.11+ 内存处理包,运行时只依赖标准库
- `AGENTS.md``CLAUDE.md` 提供同步的协作规则 - 已实现不可变数据契约、组件基类、原子修改执行器、顺序流水线、审计记录和最终稳定性复查
- `research-wiki/` 按文档生命周期区分设计、说明、参考、指南和草稿 - 当前唯一正式组件是 `paper.arxiv_submission_stamp`,只删除严格整行匹配的 arXiv 提交边栏戳
- `research-wiki/design/0001-repository-foundation.md` 记录本次基础架构选择。 - 该组件已在 5 份论文 Markdown 上只读验证,只命中 sim 和 springer 各一处,合法参考文献保持不变;
- `research-wiki/reference/GOVDOC_SAAS_CLEANING_SCOPE.md` 保存 45 份外部测试 Markdown 的只读问题审计; - 当前基础检查为 Ruff、mypy 和 87 项 pytest 测试,实际命令见本文“当前可用检查”。
- `research-wiki/scratch/markdown-cleaning-ecosystem-research-2026-08-20.md` 完成首轮生态与架构调研。
- 2026-08-21 完成师姐项目(ClinDB-ReviewBench5 份论文 Markdown 的问题审计
`research-wiki/scratch/data-5papers-cleaning-audit-2026-08-21.md`),并确定其第一版清洗范围
`research-wiki/reference/CLINDB_REVIEWBENCH_CLEANING_SCOPE.md`8 类自动清洗候选)。
- 2026-08-21 明确本项目定位为实验室共用库;GovDoc 和论文清洗都是使用场景,不是核心边界。
- 2026-08-21 批准并冻结 `research-wiki/design/0002-composable-cleaning-pipeline.md`,确定只接收 Markdown、
项目显式组装组件、单轮修改加最终只读复查的总体组织方式。
- 2026-08-22 批准并冻结 `research-wiki/design/0003-first-executable-core-architecture.md`,确定第一版只建设
Python 内存自动清洗核心:组件只提出确定可执行的精确修改,不同时建设独立检查、人工建议或真实清洗规则。
- 2026-08-22 按 `0003` 实现第一版内存核心和测试:包括不可变数据契约、组件基类、原子修改执行器、
顺序流水线和最终稳定性复查;58 项测试以及 Ruff、mypy 检查均通过。
- 2026-08-22 批准并实现 `research-wiki/design/0004-arxiv-submission-stamp-component.md`:新增严格整行匹配的
arXiv 提交边栏戳删除组件;5 份论文只读复核只命中 sim 和 springer 各一处,两处合法参考文献保持不变,
第二次运行零修改,源文件没有变化。
- 2026-08-21 完成 HTML 表格清洗专题调研
`research-wiki/scratch/html-table-cleaning-ecosystem-research-2026-08-21.md`):核实 Pandoc 表格
方言能力边界、Turndown 不处理合并单元格、Docling Markdown 导出重复合并单元格内容、MinerU 全
HTML 输出,印证审计 T001 的分流方向。
- 2026-08-21 完成 45 份测试 Markdown 中 HTML 表格的只读结构分析
`research-wiki/scratch/html-table-real-data-analysis-2026-08-21.md`):剔除空 `<tr>`
简单表 53% / 合法合并表 8% / 损坏表 40%,并定位标签不闭合、丢失 colspan 标注、无表头三类主因。
- 2026-08-21 仓库由 `govdoc-md-cleaner` 更名为 `mdpolish`,GitHub 远程仓库与本地目录同步改名;
冻结的 design 记录和带日期的 scratch 笔记保留当时的旧名。
当前已有只处理内存字符串的底层执行机制和函数级契约,运行时只依赖 Python 标准库。组件可以针对当前 项目还没有完整清洗规则集、Markdown/HTML parser、profile 格式、文件读写、CLI、批处理或生产接口。当前组件
Markdown 快照提出精确修改,流水线负责原子应用、审计记录、失败隔离和最终稳定性复查。当前唯一正式组件只删除 只能证明第一条严格规则已经闭环,不能据此认为论文、GovDoc、表格或图片已经具备完整清洗能力。
完整匹配的 arXiv 提交边栏戳,不能把这一项能力理解为已经具备完整论文、GovDoc、表格或图片清洗能力。
调研报告中的解析器、内部 IR、具体 profile 和其他真实清洗规则仍是候选方案,尚未批准。
## 服务对象与复用目标 ## 服务对象与复用目标
@@ -59,6 +34,15 @@ Markdown 快照提出精确修改,流水线负责原子应用、审计记录
当前用例只用于发现真实问题和验证通用能力,不能反过来限定库的设计。核心代码不得依赖论文 DOI、 当前用例只用于发现真实问题和验证通用能力,不能反过来限定库的设计。核心代码不得依赖论文 DOI、
GovDoc 目录、具体客户名称或某一转换器的固定输出路径。 GovDoc 目录、具体客户名称或某一转换器的固定输出路径。
## 测试数据
- **论文 Markdown**`data/md/`,共 5 份,按 ClinDB-ReviewBench 中使用的论文缩写命名,
供本地查看和组件只读验证;
- **GovDoc Markdown**`/home/lihaoze/gov_test_data/compare`,共 7 组、45 份,输入位于各组 `uploads/` 下,
保持仓库外只读,不复制到本项目。
两组数据都不是可提交的自动测试 fixture。`data/` 已被 Git 忽略,清洗实验不得覆盖这些输入。
## 面向复用的设计原则 ## 面向复用的设计原则
- **通用核心**:只接收 Markdown;第一版只执行确定、可审计的精确修改,不读取 PDF、图片或转换器 JSON; - **通用核心**:只接收 Markdown;第一版只执行确定、可审计的精确修改,不读取 PDF、图片或转换器 JSON;
@@ -68,41 +52,46 @@ GovDoc 目录、具体客户名称或某一转换器的固定输出路径。
- **可复现**:规则、配置、输入哈希、输出和每次变更都可以追踪; - **可复现**:规则、配置、输入哈希、输出和每次变更都可以追踪;
- **可扩展**:新增项目在自身边界处理上游适配,并主要组合或补充组件和 profile,而不是复制一套清洗器。 - **可扩展**:新增项目在自身边界处理上游适配,并主要组合或补充组件和 profile,而不是复制一套清洗器。
## `data/` 的职责
`data/` 是实验室项目的本地数据工作区。当前存放师姐论文清洗项目的输入和转换产物,未来可能继续加入
其他项目的数据。新增数据时应逐步按项目命名空间组织,例如 `data/<project_id>/...`,避免不同项目的
输入、产物和评测结果混在一起。
数据目录与通用库保持以下边界:
- `data/` 已被 Git 忽略,不作为库源码、公开 fixture 或发布包的一部分;
- 默认把项目数据视为只读输入,清洗结果写到独立输出位置,不覆盖原文件;
- 数据可以推动通用规则设计,但项目专属规则必须进入对应 profile;
- 测试需要的公开样例应单独制作脱敏、最小化 fixture,不能直接复制真实项目文档;
- `/home/lihaoze/gov_test_data` 等仓库外真实材料同样保持只读,不复制、不修改、不提交。
任何清洗语义、规则格式、评估指标、代码目录或运行依赖,都应先形成设计记录并获得确认。研究结果进入
具体项目或生产系统前,还需要在使用方范围内独立验证。
## 目录结构 ## 目录结构
```text ```text
mdpolish/ mdpolish/
├── .gitignore
├── AGENTS.md ├── AGENTS.md
├── CLAUDE.md ├── CLAUDE.md
├── README.md ├── README.md
├── pyproject.toml # Python 包、构建和开发检查的唯一配置 ├── pyproject.toml # Python 包、构建和开发检查配置
├── src/mdpolish/ # 第一版内存核心和已批准的业务组件 ├── src/
├── tests/ # 核心契约和组合行为测试 │ └── mdpolish/
├── data/ # 本地项目数据;Git 忽略,未来按项目分区 │ ├── __init__.py # 第一版核心公共导出
│ ├── component.py # 组件基类和元数据契约
│ ├── edits.py # 文本编辑验证与原子应用
│ ├── models.py # 不可变数据模型和运行状态
│ ├── pipeline.py # 顺序执行和最终稳定性复查
│ ├── py.typed # 类型信息声明
│ └── components/
│ ├── __init__.py
│ └── arxiv_submission_stamp.py
├── tests/
│ ├── test_arxiv_submission_stamp.py
│ ├── test_component.py
│ ├── test_edits.py
│ ├── test_models.py
│ └── test_pipeline.py
├── data/ # 本地测试数据;Git 忽略;此处只展开常用入口
│ └── md/
│ ├── dmp.md
│ ├── ejhf.md
│ ├── jama.md
│ ├── sim.md
│ └── springer.md
└── research-wiki/ └── research-wiki/
├── README.md ├── README.md # Wiki 分类与维护规则
├── design/ # 方案选择与冻结决策 ├── design/ # 批准前的选择;批准后冻结
├── explanation/ # 当前有效机制及原因 ├── explanation/ # 当前有效机制及原因
├── reference/ # 需要准确查询的稳定事实 ├── reference/ # 稳定查询事实
├── guides/ # 已实际验证操作步骤 ├── guides/ # 已验证操作步骤
└── scratch/ # 调研笔记和未收敛草稿 └── scratch/ # 调研和未收敛材料
``` ```
## 开始工作 ## 开始工作