Files
pinmap-to-pinlist/CHANGELOG.md
Agent 3c5fcff1d5 v1.6.0 修复 PinMAP→PinList 上方引脚丢失 + 双向模板样式 + QFN60 端到端验证
F013: Code/src/pinmap_parser.py 增加 Top 边自动布局检测
F014/F015: 双向模板样式确认
F016/F017: 新增 5 个 QFN60 端到端测试
2026-06-12 20:45:51 +08:00

178 lines
8.2 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.
# Changelog
## [v1.6.0] - 2026-06-12
### 🐛 Bug 修复
#### F013 【P0】修复 PinMAP→PinList 上方引脚丢失
- **根因**`pinmap_parser.py` 硬编码假设上边 Name 在 Number 上方min_row但用户真实 PinMAP 中 Number 在上、Name 在下,导致上边 15 个引脚全部丢失
- **修复**:增加 `_detect_top_layout()` 自动检测逻辑,通过扫描两行数据的数字/文本特征判断 Name 和 Number 的上下位置,兼容两种布局
- QFN6015×1560 引脚)端到端往返验证通过
#### F014 【P0】PinList→PinMAP 样式模板应用
- 确认 `Code/src/Template/PinMAP-Template.xlsx` 存在样式解析成功fonts=2, fills=2, borders=2, cell_xfs=4
- 搜索路径:优先 `Code/src/Template/` → 项目根目录 → cwd
#### F015 【P0】PinMAP→PinList 样式模板应用
- 确认 `Code/src/Template/PinList-Template.xlsx` 存在样式解析成功fonts=2, fills=1, borders=2, cell_xfs=4
### ✅ 测试
- 新增 5 个 QFN60 端到端测试F016/F017
- 全量 23 个测试全部通过,无回归
- 覆盖两种布局方向Layout A/B+ 往返一致性
### 🔧 修改文件
- `Code/src/pinmap_parser.py` — F013: 增加 `_detect_top_layout()``_count_numeric()`,上边 Name/Number 查找改为动态检测
- `Code/src/test_pinmap.py` — F016/F017: 新增 5 个 QFN60 测试函数
- `docs/modification-assessment-v1.6.md` — 新增 v1.6 架构评估文档
## [v1.5.5] - 2026-06-12
### 🐛 Bug 修复(深度修复)
#### BUG-005 【高】模板文件名/路径错误
- **根因**v1.5.4 只改了模板文件名(`BallList-Template.xlsx``PinList-Template.xlsx`),但未修正搜索路径
- **修复**:模板搜索路径优先查找 `Code/src/Template/` 目录,再回退项目根目录和当前工作目录
- 模板样式现在可正确应用到输出文件
#### BUG-006 【高】PinList→PinMAP 上边 Name 与左边 Name 同行
- **根因**v1.5.4 将上边 Name 放在 row 2Excel 第 3 行),与左边 Name/Number 起始行相同,导致 3 条边数据混在同一行
- **修复**:将上边 Name 移至 **row 0**Excel 第 1 行),上边 Number 保持在 row 1第 2 行),使上边完全独立于其他边
- 不再需要角点例外逻辑,代码更简洁
- 每条边数据独立分隔,肉眼可读性大幅提升
### 🔧 修改文件
- `Code/src/main.py` — BUG-005: 模板搜索路径修正(优先 Code/src/Template/
- `Code/src/pinmap_layout.py` — BUG-006: 上边 Name 坐标改为 `(0, c)`,移除角点例外
- `Code/src/pinmap_parser.py` — BUG-006: 上边 Name 从 row 0 读取Number 从 row 1 读取
- `Test/fixtures/sample_4x4.xlsx` — BUG-006: 更新为 v1.5.5 新布局
- `Code/src/test_pinmap.py` — BUG-006: 测试数据适配新布局
### ✅ 测试
- 全部 37 个测试通过
## [v1.5.4] - 2026-06-09
### 🐛 Bug 修复
#### BUG-005 【高】模板文件名错误
- 模板文件重命名:`BallList-Template.xlsx``PinList-Template.xlsx``BallMAP-Template.xlsx``PinMAP-Template.xlsx`
- 同步更新 `main.py` 中的函数名和模板引用路径
#### BUG-006 【高】布局重设计Number 外侧 + Name 里侧)
- 重新设计 PinMAP 布局:从网格边界往中心走,第 1 圈 = Number数字第 2 圈 = Name引脚名
- **上边**Number row 1最顶行Name row 2第二行角点例外最左/右上边 Name 在 (1,0)/(1,cols+1)
- **左边**Number col 0最左列Name col 1第二列
- **下边**Number row rows+3最底行Name row rows+2倒数第二行
- **右边**Number col cols+1最右列Name col cols右二列
- Pin1 保持在左上角A3=1, B3=Pin1
- 不再需要角点 "//" 合并,每条边不共享任何单元格
- 全部 15 种网格大小验证无冲突
- 18/18 单元测试 + 37/37 集成测试全部通过
### 🔧 修改文件
- `Code/src/main.py` — BUG-005: 模板函数和引用改名BUG-006: 传递 cols 参数
- `Code/src/pinmap_layout.py` — BUG-006: 重写坐标公式 + `get_name_cell()` 支持 cols 参数 + 角点例外
- `Code/src/pinmap_generator.py` — BUG-006: 传递 cols 参数 + 更新注释
- `Code/src/pinmap_parser.py` — BUG-006: 重写边界检测、Name 读取(角点例外检测)
- `Code/src/test_pinmap.py` — BUG-006: 更新测试数据适配新布局
- `Test/fixtures/PinList-Template.xlsx` + `PinMAP-Template.xlsx` — BUG-005: 模板文件重命名
### 📝 文档
- 更新 `CHANGELOG.md` 追加 v1.5.4 版本日志
- 更新 `README.md` 追加 v1.5.4 版本说明
- 生成 `Releases/v1.5.4/CHANGELOG.md`
## [v1.5.0] - 2026-06-06
### ✨ 功能新增
- **F009 MAP→List 使用 balllist 模板**`run_map_to_list()` 改查 `BallList-Template.xlsx`,不再共用旧模板
- **F010 List→MAP 使用 ballmap 模板**`run_list_to_map()` 改查 `BallMAP-Template.xlsx`,模板完全分离
- **F011 模板格式提取式应用**:从模板的 cellXfs/fonts/borders/fills 提取实际样式定义,替换硬编码边框和对齐;无模板时完全回退到默认样式
- **F012 验证+回归测试**:新增 `test_f012_pinname_position()` 验证下边 Name 在 max_row-1、上边 Name 在 min_row+1添加 5×5 往返一致性测试
### 🗑️ 废弃
- `_find_template_path()` (PinMAP-Template.xlsx) — 不再自动查找,由 `_find_balllist_template_path()``_find_ballmap_template_path()` 替代
### 📝 文档
- 更新 `docs/tasks.md` T015 状态为已完成
- 更新 `docs/features.md` F009-F012 状态
### 🔧 修改文件
- `Code/src/main.py` — 新增两个模板查找函数,修改两个方向的模板调用
- `Code/src/xlsx_writer.py` — 重写 `_styles_xml()` 支持模板样式提取
- `Code/src/template_reader.py` — 增强 cellXfs 提取xfId、applyAlignment、wrapText
- `Code/src/test_pinmap.py` — 新增 F012 回归测试
## [v1.3.15] - 2026-06-01
### 🐛 Bug 修复
- **pinmap_layout.py**: 周长公式从 `2(rows+cols)4` 改为 `(rows+cols)×2` — 修复角点共享策略,每条边独立包含其端点
- **pinmap_generator.py**: 角点单元格写入 `"6/7"` 格式 — 修复 v1.3 下角点引脚丢失问题
- **pinmap_parser.py**: 读取时包含角点,按 `"/"` 拆分解析多引脚序号 — 修复 roundtrip 丢失引脚问题
## [v1.2.0] - 2026-05-26
### 🐛 Bug 修复
- **run.bat**: `cd /d "%~dp0src"``cd /d "%~dp0Code\src"` — 修复 cd 路径报错
- **run.bat**: `chcp 65001` 末尾添加 `>nul` — 修复 title 中文乱码
- **run.bat**: `mode con lines=20``lines=50` — 修复 Log 窗口无法上滑
- **Code/src/file_selector.py**: `.strip()` 后增加 `.strip('"\'')` — 修复拖拽文件路径带引号导致不存在
## [v1.0.1] - 2026-05-25
### 📝 文档完善
- 新增 `Code/docs/README.md` — 项目完整说明文档8.1KB
- 新增 `Code/docs/QUICKSTART.md` — 快速入门指南6.6KB
- 新增 `Code/docs/RELEASE.md` — 版本发布说明5.1KB
- 完善项目文档体系,覆盖架构设计、快速上手、版本历史
## [v1.0.0] - 2026-05-25
### 🎉 首次发布
#### 功能
- **PinMAP 解析**:支持方形/长方形封装,左上角为 1 脚,逆时针排序
- **格式支持**:兼容 `.xls`BIFF8 引擎)和 `.xlsx` 两种 Excel 格式
- **智能验证**:自动检测重复引脚、间隙、空单元格等结构问题
- **PinList 生成**:按顺时针顺序输出引脚序号列表
- **GUI 模式**:支持 tkinter 文件选择器,零命令行使用
- **命令行模式**`python main.py input.xlsx` 快速转换
#### 技术
- Python 标准库,零第三方依赖
- 自定义 BIFF8 引擎解析 `.xls` 文件(~19KB
- `openpyxl` 读写 `.xlsx` 文件
- 模块化架构:解析 → 验证 → 生成 → 输出
#### 架构
- `main.py` — 入口与流程编排
- `xls_reader.py` — BIFF8 `.xls` 解析引擎
- `xlsx_reader.py``.xlsx` 解析器
- `pinmap_parser.py` — PinMAP 结构解析
- `validator.py` — 结构验证与错误检测
- `pinlist_generator.py` — PinList 生成器
- `xlsx_writer.py``.xlsx` 输出
- `file_selector.py` — tkinter 文件选择器
- `models.py` — 数据模型
- `utils.py` — 工具函数
#### 测试
- 6 个测试夹具覆盖正常/异常场景
- 测试报告:`Test/test_report.md`