Files
2026Technology-Competition/docs/milestone2.5-mixed-parser-review.md
T

57 lines
4.4 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.
# 里程碑 2.5(MIXED 完整段落解析)评审与交付报告
- 日期:2026-08-09
- 状态:**通过**(最终里程碑评审 Ready for delivery: YES
- 关联文档:`docs/superpowers/specs/2026-08-09-mixed-paragraph-parsing-design.md``docs/superpowers/plans/2026-08-09-mixed-paragraph-parsing.md``docs/milestone2-excel-parser-review.md`(遗留记录#1 的闭环)
- 范围:里程碑 2 验收遗留项「MIXED 折叠进纯表路径」的完整落地(design §3.5.2「段落分割→各段落最优解析」)
## 一、交付内容
新实现 5 个任务、6 个新测试用例(当前全量 **58 passed**),7 个提交(base `81c6b6c`):
| 任务 | 提交 | 说明 |
|------|------|------|
| Task 9 段落分割器 | `34ef28b` | `paragraph_splitter.py``split_paragraphs(matrix) -> list[(start,end)]`(含端点、0-based,全空行为界,空矩阵→[]) |
| Task 10 data_models 扩展 | `539945b` | 追加 `MixedParagraph`kind=table/free_text、matrix、table、text、source_range)、`MixedSheet``ExcelParseResult.mixed`(默认[]);仅追加不改既有类字段 |
| Task 11 MIXED 装配 | `1e3f702`+docs `bc79945` | `excel_parser.py` MIXED 分支:forward_fill→split→每段 classify→TABLE:段内 `header_row=find_header_row(seg)` + `seg_fmt_map`(物理→段内坐标);其余→FREE_TEXT(`extract_text_blocks`+`build_free_text_table`,防二次递归);表/自由文本段双写 `result.tables` + `result.mixed` |
| Task 12 混合型样本+端到端 | `7592516` | `samples/要件定義_混合型.xlsx`(表段+连续碎片段);`test_real_samples.py` 新增 `test_mixed_sample_segments_detected`(段落==2、kinds、F101、rows==3、碎片含 改修ポイント/対象期間) |
| Task 13 遗留清理 | `d93cc77` | ① `extraction_method` 枚举同源(`ExtractionMethod` .value);② `header_row` 越界防御;③ `forward_fill` 非法/越界范围跳过完整实现;④ `Provenance.row` 语义注释;⑤ 补测试 6 个 |
## 二、验收结论
| 验收项 | 结论 |
|--------|------|
| 段落分割(空行边界) | ✅ 纯函数 5 用例 + 样本实测 `[(0,3),(5,6)]` |
| 段落容器与 API 兼容 | ✅ 追加式扩展,既有类/字段/消费方零破坏(58 passed |
| MIXED 各段最优解析 | ✅ 表段 → `extract_table`(表头/格式化);碎片段 → 文本块+占位表(`llm_from_free_text` |
| formatting_map 段内坐标 | ✅ `seg_fmt_map[(pr-s, pc)]` 物理→段内平移,与 `extract_table` 索引语义闭环(`test_parse_mixed_sheet_formatting_in_mid_segment` 锁旧错误) |
| 防二次递归 | ✅ 段内二次 MIXED 落入 FREE_TEXT 分支 |
| 混合型端到端 | ✅ 样本真实驱动,断言 4 项全绿、无 skip |
| 回归安全 | ✅ TABLE/FREE_TEXT 路径行为不变;58 passed14 基线 + 27 里程碑2 + 17 新 M2.5 |
| 每任务 pytest 全绿 | ✅ 各任务评审均 ApprovedT9-T13 |
| 覆盖率 >80% | ⚠️ 未安装 pytest-cov(同里程碑2,可选增强,非阻塞) |
## 三、评审发现与闭环
最终里程碑评审(base `81c6b6c..d93cc77`)独立复验:58/58 passed、样本直接内省 `[(0,3),(5,6)]`、坐标转移零偏移(F101 段内 `(1,0)`);无 Critical / Important,仅以下 Minor(已记录,不影响交付):
| 事项 | 处置 |
|------|------|
| `progress.md` Task11 重复/编码行 | 本次去重 |
| `MixedParagraph.matrix` docstring 写「原始矩阵」但存 forward-filled 段 | 标签进 backlog(措辞调整) |
| `excel_parser` 两处重复的 `fmt_map` 遍历 | backlog(后续抽取公共辅助) |
| `test_excel_parser.py` 中部 import(风格) | backlog |
| `_AI_USAGE_LOG.md` Task13 范式步骤「整体迭代」用词 | 本次改为「反馈迭代」并补时间 |
| 尾随空行(Windows 风格) | 既有 backlog(非功能) |
## 四、下一步建议(不在本里程碑范围)
- 将碎片段中「・」/「■」结构化到 LLM 提取(依赖 InferenceEngine,后续里程碑)
- 覆盖率工具(pytest-cov)与默读增强
- 既有 MIXED 的 `source_range` 供 Impact/Writer 的追溯消费
## 五、提交与日志
- 提交:`34ef28b` `0f137b9` `539945b` `1e3f702` `bc79945` `7592516` `d93cc77`
- `_AI_USAGE_LOG.md` 每任务各追加 1 行(范式步骤:Agent 实现/测试验证/反馈迭代),模型 `deepseek-v4-flash-free`
- (本次报告本身随附日志行 + 提交)