导入表头修复

This commit is contained in:
andy committed 2026-09-16 17:11:16 +08:00
1 parent 8a0f02c9be
commit a3505f3921
28 files changed
+281 -45

No files matched your search

@@ -0,0 +1,38 @@
# 名单附件兼容缺少电话列
## 范围与授权
- 用户授权:兼容修复已提供的 XLSX 名单因缺少“电话”表头而被拒绝的问题。
- 仅修改名单附件标准化和相关测试、当前业务契约;缺少电话列时输出空电话,已有电话列的内容继续保留。
- 不修改原始客户附件,不将真实旅客资料保存为测试夹具,不执行 ERP 写入、部署或重启。
## Worktree 检查
- Branch: `main`
- Worktree: `/Users/andy/IdeaProjects/LWLT-AIBOT`
- Base commit: `8a0f02c9be4141feb9aecfdeb0051ea6c0748bf3`
- Existing changes: 未跟踪 `.idea/`,与本任务无关,保留原样。
- Other worktrees: 无。
- Overlap: Clear。使用当前工作区;Feature 模式只写本任务的项目记忆记录。
## 已知证据
- 原附件 11269 字节,SHA-256 `a109854555d0cc9343fa7e416cf469418cde6748c4baf4fb3bd6627a89a4de3c`,与用户生产日志一致。
- 当前 v1.6.0 复现 `roster_workbook_header_not_found`;第 2 行缺少电话表头。
- 仅在内存增加空电话列后,原附件 8 行通过标准化。未改动原文件。
## 结果与验证
- 已完成:名单标准化器升级为 `ltjt-passenger-roster-workbook-v1.7.0`。电话表头改为可选;缺列输出空电话,存在时照常读取、检查重复表头及非法值。其他 11 个业务字段仍必需,输出仍为 canonical 13 列。
- 不从无表头的数字推断电话;原表无表头的数字不导入。明确标记为“领队”的记录仍受姓名和电话必填规则约束。
- 增加缺列、删列、重排列名、合并备注、XLS 转换路径及旧电话校验回归。真实原附件只在内存读取:8 行、8 个空电话,Program Parser 返回 `agent_parse_passed`,原始 SHA-256 未变。
- 同步名单输入契约、生命周期 mapping、业务入口和操作说明。输入契约及 DOCX 为 `0.5.135`;五个 Skill 统一发布为 `0.5.128`,旧发布物按原哈希归档。插件保持 `0.5.186`,没有数据库迁移。
- 验证:定向名单测试 35/35;`check:repo` 10/10;`check` 通过;`test:control-plane` 271/271;`test:legacy` 417/417;`build` 通过;`git diff --check` 通过。
- 五个 Skill 官方校验和 ZIP/源码逐文件比较通过;当前发布清单、源文件哈希及旧发布物哈希通过。DOCX 渲染后逐页检查全部 16 页,中文正常、无裁切;第 5 页为新名单说明。
- 完整仓库检查在临时干净源码快照运行,保留工作区既有 `.idea/`、`.DS_Store` 和旧忽略日志,不删除或收编。快照中的 2742 个源/文档/发布文件与工作区逐文件哈希一致。首次卫生检查仅因本次 DOCX 预览目录尚未清理失败;清理本次预览目录后 `check:repo` 和 `test:legacy` 全部通过。
- 主线程最终只读复核:PASS;未启用多 Agent。无真实 ERP 写入、部署、服务重启、提交或推送。生效需用户更新并重启服务端。
- 脱敏验证结论:[证据说明](../../../archive/evidence/2026-09-16/roster-optional-phone-01a0858b/README.md)。
## Promotion Candidates
- 后续 Integration 可将“名单原文件电话列可选;缺列留空;领队电话仍必填;不推断无表头数字”同步到 canonical 项目记忆。本次 Feature 未修改 canonical 项目记忆。