Files
LWLT-AIBOT/.project-docs/30-worklog/tasks/20260910-roster-trailing-empty-columns-01a0858b.md
T
2026-09-10 17:30:27 +08:00

52 lines
4.3 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.
# 名单 TSV 末尾空列修复
- Task ID: `20260910-roster-trailing-empty-columns-01a0858b`
- Mode: Feature
- Status: Complete (local implementation and validation)
- Authorization: 用户明确要求修复原始 XLS 名单解析失败;仅本地实现与验证。
## Concurrent Worktree Check
- Branch: `main`
- Worktree: `/Users/andy/IdeaProjects/LWLT-AIBOT`
- Base commit: `be7d765018a7c3e5cdfa4631d962327457cf33bd`
- Existing changes: 未跟踪 `.idea/`,保留且不涉及;忽略的 `.DS_Store` 同样保留。
- Other local worktrees: 无。
- Overlap result: Clear;没有与名单校验相关的既有改动。
## Scope and constraints
- 修复 TSV 校验/转换时整体 `trim()` 删除末尾空字段分隔符的问题。
- 相关执行端存在同源问题,范围包含服务端统一校验、插件派发和原生名单合并;按发布矩阵同步插件 `0.5.173`、平台最低版本、mapping、测试、版本化 ZIP 与清单。
- 保持 13 列、行数、证件类型、序号及领队联系人的现有契约。
- 使用合成数据补回归测试;用户原始 XLS 仅作本地只读复现,不纳入仓库或日志。
- 不部署、重启、操作 ERP 或发送外部通知;不修改数据库或 canonical 项目记忆。
## Findings
- 原始 XLS 经现有转换器和 normalizer 得到 19 条完整的 13 列记录。
- 最后一条备注为空,统一 operation 校验对整段 TSV 调用 `trim()` 后变为 12 列,复现生产错误。
- 插件派发校验及原生名单合并也使用整体 `trim()`;只修服务端会在后续插件阶段再次阻断。
## Verification
- 回归先行:新测试在旧代码上复现解析、派发和合并异常(8 项中 4 失败);实际 12/14 列仍需拒绝的测试也覆盖尾部分隔符不能被静默修正。
- 修复后定向 8/8 通过,覆盖两类名单、19 条记录、尾部一/两列为空、CRLF、覆盖确认、严格列数及领队匹配。
- 用户原始 XLS → 生产 converter/normalizer → Program Parser → 插件 dispatch validator → 本地空白游客位 merge:通过;19 条记录,输出每行均为 13 列,TSV 内容原样保留,原文件 SHA-256 未改变。合并使用本地模拟游客位,未接触真实 ERP。
- `node --run check`:PASS;`node --run build`:PASS。
- `node --run test:control-plane`:194/194 PASS。
- `node --run test:legacy`:290 项全部已验证通过(含本任务新增 3 项)。首次 287 通过;1 项发现 ZIP 多套一层目录,已修正为 manifest 位于 ZIP 根目录并通过完整 10 项 repository-hygiene 检查;另 2 项因沙箱禁止监听 127.0.0.1 失败,获本地测试权限后定向补跑 2/2 PASS。没有连接真实服务。
- `node --run check:repo`:10/10 PASS,验证副本 `/private/tmp/ltjt-roster-verify-uhqh_lyb` 使用当前 tracked 文件及本任务新文件,排除已有 `.idea/`、Finder 文件及秘密,复用依赖。原工作目录的 IDE/Finder 文件保持不动,仍构成 2 项无关 hygiene 问题。
- 新 ZIP 完整 entry set 和全部 20 个文件(包括 README)与源码逐字节一致;清单哈希、旧版归档原始哈希均通过。`git diff --check`:PASS。
- 最终本地复核:实现仅调整 TSV 换行/边界空行处理,未放宽 13 列规则、领队来源、占用游客位覆盖授权或原生保存门禁;其余源码改动为发布版本同步。未使用子 Agent,未声称独立 Agent 审核。
## Outcome and follow-ups
- 服务端统一校验和插件执行链路均已修复;插件为 `0.5.173`,旧版 `0.5.172` 原包与清单已移至日期归档。
- 部署范围:重建并部署包含 `LianSyn-platform/external-agent-client.mjs` 与平台最低版本更新的服务镜像,同时加载新版插件并刷新平台/ERP 页面。数据库、Parser/normalizer 输入契约及原始表格不需要修改。
- 部署、浏览器插件重载、真实 ERP 写入验收由用户后续执行;建议重新提交名单指令并重新上传原始 Excel,不自动重放本次失败任务。
## Promotion Candidates
- Target: canonical current state / 名单实现约束。集成时可登记插件 `0.5.173` 及服务端、插件 TSV 保留末尾空列的修复事实;证据为本任务回归及原始 XLS 只读链路验证。不增加业务能力或修改输入契约,真实 ERP 验收仍待部署方完成。本任务不更新共享索引或集成快照。