兼容表头

This commit is contained in:
andy committed 2026-09-15 18:41:57 +08:00
1 parent af85ea22ec
commit 364ef4ae30
27 files changed
+414 -50

No files matched your search

@@ -0,0 +1,15 @@
# 名单模板公式兼容验证
本目录记录 2026-09-15 本地验证结论,不是生产运行结果或后续版本规则。
- 归一化器:`ltjt-passenger-roster-workbook-v1.6.0`;业务输入契约 `0.5.134`。
- 用户提供的真实 XLS 经过项目隔离转换器、名单归一化器和 Program Parser 完整校验:22 行、13 列、序号 1–22 连续,序号 22 的领队姓名/电话可识别,解析状态 `agent_parse_passed`。21 行电话为空,沿用现有允许空值的规则。
- 真实附件只在内存和转换器受控临时目录中处理,源文件哈希前后相同;没有持久化旅客明细、调用数据库、创建任务或写入 ERP。程序验证使用合成定位文字,不代表真实 ERP 订单匹配或执行验收。
- 回归:`node --run check`、`node --run build` 通过;`check:repo` 10/10,`test:control-plane` 253/253,`test:legacy` 411/411。仓库检查也是 legacy 套件的一部分,不重复计入总数。
- 回归使用 `/private/tmp/ltjt-roster-formula-verify-20260915` 的逐文件一致源码副本,排除 `.env`、IDE 配置、可重建输出和既有日志等残留;保留原工作区既有文件。仅 legacy 的本机 HTTP fixture 使用回环端口权限。
- 新增 8 个专项测试覆盖:说明区/表头/旅客错误值区分,15/18 位身份证模板,列重排/共享公式/1904 日期系统,缓存缺失及不一致,跨行/歧义/非模板/外部引用,来源精度/日期/空白字符,尾部局部数据保留,以及 22 人名单到 Program Parser 的完整路径。
- 五个 Skill 官方 `quick_validate.py` 全部通过;所有 `.skill` 重新从活动源构建,逐文件字节一致。Skill 版本 `0.5.127`,扩展版本保持 `0.5.185`。
- 指令表 `0.5.134` 从唯一 Markdown 源及既有布局模板重建,Documents renderer 输出 16 页 PNG 并逐页检查:中文正常、无截断/重叠。当前 DOCX、构建器、源 Markdown 哈希由 `dist/release-manifest.json` 定义。
- 最终限制:只支持明确匹配的两种同一行身份证模板;不执行任意公式、不验证身份证真实性或校验码。错误值、来源不合法或缓存不一致继续阻断;身份证不写入 canonical TSV 或 ERP。
旧发布物已校验后归档在 [发布归档](../../../releases/2026-09-15/roster-template-formulas-01a0858b/README.md)。
+2
View File
@@ -5,3 +5,5 @@ Historical material, not current business rules or release instructions.
- [0.5.183 before dispatch/readiness fix](dispatch-readiness-01a0858b/README.md)
- [0.5.184 before resolution navigation recovery](resolution-navigation-01a0858b/README.md)
- [名单模板公式兼容前的 Skill 和指令表](roster-template-formulas-01a0858b/README.md)
@@ -0,0 +1,3 @@
# 名单模板公式兼容前的发布物
这些文件是只读历史材料,不是当前业务规则或发布入口。旧版五个 Skill 0.5.126 和指令表 0.5.133 归档前后均核对 SHA-256。当前文件及哈希以项目 dist/release-manifest.json 为准。
@@ -0,0 +1,69 @@
{
"manifest_version": 1,
"generated_on": "2026-09-15",
"baselines": {
"chrome_extension": "0.5.185",
"skills": "0.5.126",
"business_instruction_docx": "0.5.133",
"agent_prompt": "ltjt-agent-prompt-v1.8-independent-headcount-categories"
},
"artifacts": [
{
"kind": "chrome_extension",
"version": "0.5.185",
"path": "dist/ltjt-order-assistant-0.5.185.zip",
"source": "chrome-extension/ltjt-order-assistant",
"sha256": "42d12ea2a9e090af3202b683f66a4418fa7aac199686bfb7840251e1fb9b899c"
},
{
"kind": "skill",
"name": "lwlt-arrangement",
"version": "0.5.126",
"path": "dist/lwlt-arrangement-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-arrangement",
"sha256": "83770befe3a8e4048eacaeacb567c5139bf8a0b3a49f2b1513c26383422f2a9c"
},
{
"kind": "skill",
"name": "lwlt-confirmation",
"version": "0.5.126",
"path": "dist/lwlt-confirmation-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-confirmation",
"sha256": "543507ed8b68c183d2df6722061b0e927ebb728de4bf254d15f83311c9264018"
},
{
"kind": "skill",
"name": "lwlt-lifecycle",
"version": "0.5.126",
"path": "dist/lwlt-lifecycle-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-lifecycle",
"sha256": "fff3879d9a4143c34ae51e091b91411e55382ad3f5d77c99d6202a005b1ddbd9"
},
{
"kind": "skill",
"name": "lwlt-newbooking",
"version": "0.5.126",
"path": "dist/lwlt-newbooking-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-newbooking",
"sha256": "5eb6a7bf5649a0fcee3fbee488a124e1b1d018a642a3a49ebb5439ccf20ccc2f"
},
{
"kind": "skill",
"name": "lwlt-updating",
"version": "0.5.126",
"path": "dist/lwlt-updating-0.5.126.skill",
"source": "agent设计规范/skills/lwlt-updating",
"sha256": "3bd665207649cbb8e0e5ebb012c916720201fe160eea62bccdf1c3a1f0275d1d"
},
{
"kind": "business_instruction_docx",
"version": "0.5.133",
"path": "dist/老挝联泰AI指令表-0.5.133.docx",
"source": "agent设计规范/templates/business-input-templates.md",
"builder": "tools/build_business_instruction_docx.py",
"sha256": "879f1acc3a6a60842e59ae8396f72d39504ea1f3a4110a9f305d94553b38848c",
"source_sha256": "37b6b689c5c6a80683dd1deeff52a90ac8b4bd3ac0380e6b771dcb557c0918f7",
"builder_sha256": "c162884210da22e3b78368749b66f1f177df5e9fc6155f4fd9954bd516d187f1"
}
]
}