docs: 记录 git 历史清洗,并把文档里的提交号重映射到新历史

- 方案文档新增 §12:为什么洗(公开文档含真实工号/姓名/16 位公务卡号/内网 LLM 地址与 key,
  历史 config.json 含真实登录密码;另发现两份 .xls 是真实申购单、四组样本发票无法证明不含个人信息)、
  怎么做(git-filter-repo 删 19 条路径 + 全历史替换六类特征)、怎么验证(重扫 608 个 blob 零命中、
  与备份 HEAD 逐文件对比只有预期差异)、善后(改密码、轮换 Gitea token、旧 clone 重新拉、删备份 bundle)
- §11.5 第 3 项(模板选择)标记完成
- 按 .git/filter-repo/commit-map 把文档引用的 6 个提交号重映射(6 文件 10 处),
  否则所有「看提交 xxx」的指引在重写后的历史里都是死链
- src/infra/documents/README.md 改写模板章节;docs/MCP.md 文档产物段、README 结构表、
  AGENTS 重要约束同步模板解析顺序与 REQUISITION_TEMPLATE
- 另记一笔:.git/filter-repo/already_ran 时间戳是 2026-06-12,这个仓库六月中已洗过一次历史
This commit is contained in:
wandering
2026-10-19 23:57:49 +08:00
parent 7e900ebdea
commit d3728bfe51
8 changed files with 76 additions and 23 deletions
+16 -9
View File
@@ -7,7 +7,7 @@ last_reviewed: 2026-10-19
| 文件 | 职责 |
|------|------|
| `invoice.py` | 发票类型常量、CSV 列定义、CSV/JSON 读写、批量分类 |
| `requisition.py` | 低值易耗品申购单:从 `.invoice_cache` 取明细 → 清洗与去重 → Excel COM 填模板 |
| `requisition.py` | 低值易耗品申购单:从 `.invoice_cache` 取明细 → 清洗去重 → Excel COM 填模板 |
## 对外接口
@@ -16,16 +16,23 @@ last_reviewed: 2026-10-19
| `load_csv` / `save_csv` / `save_invoice_csv` | 支付记录与发票级 CSV 读写 |
| `classify_invoice_batch(cache_map)` | 按类型分组:travel / general / application / attachments |
| `load_requisition_items(cache_dir, exclude_keywords)` | 申购明细:清洗品名、猜规格、按发票号去重、关键词排除 |
| `load_project_desc(session_dir)` | 「对应实验实训项目」取值顺序:`normal_info` → `travel_info` → 旧 `agent_state.json` → 默认 |
| `generate_requisition(session_dir, template, output, project_desc, exclude)` | 一站式生成;`mcp__arb__doc_requisition` 经 `run_com` 调它 |
| `load_project_desc(session_dir)` | 「对应实验实训项目」取值:`normal_info` → `travel_info` → 旧 `agent_state.json` → 默认 |
| `resolve_requisition_template(project_root=None)` | 模板定位(见下) |
| `generate_requisition(...)` | 一站式生成;`mcp__arb__doc_requisition` 经 `run_com` 调它 |
## 申购单
## 申购单模板
查找顺序(`resolve_requisition_template`):
1. 环境变量 `REQUISITION_TEMPLATE` 指定的文件(不存在则告警后继续往下找)
2. `templates/低值易耗品申购*.xls`(仓库里那份就是它,**空白件**:只有标题行与表头行)
3. 项目根目录 `低值易耗品申购*.xls`(兼容旧位置;同目录取名字最大者)
- 需要 **Windows + Microsoft Excel + pywin32**
- 模板取项目根目录 `低值易耗品申购*.xls` 中名字最大者(仓库里保留的就是它)
- 产物写 `cases/<id>/artifacts/`,不再污染项目根目录(旧实现把带时间戳的产物生成在模板旁边,
会让下次模板查找命中上次的产物)
- 表头在第 2 行、数据从第 3 行起、末尾追加合计行;列位与行号常量在 `requisition.py` 顶部
- 输出默认落在会话目录的 `artifacts/` 下,**不写到模板旁边**——否则上次的产物下次会被当成模板
- 表头在第 2 行、数据从第 3 行起、末尾追加合计行;写入前会先删掉第 3 行起的既有内容,
所以误用已填写的文件当模板也不会残留旧明细(但别这么干)
- 列位与行号常量在 `requisition.py` 顶部(`COL_*`、`DATA_START_ROW`)
> Word 版易耗品出库单(`consumable.py`)已删除:模板自提交 `63b97c6`(2026-08-31)起不在仓库,
> Word 版易耗品出库单(`consumable.py`)已删除:模板自提交 `4fbb4c3`(2026-08-31)起不在仓库,
> 那条路径此后一直静默失败。历史实现看 git。