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:
@@ -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。
|
||||
|
||||
Reference in New Issue
Block a user