Files
LWLT-AIBOT/archive/project-history/2026-08-16/HANDOFF.pre-governance.md
T

156 lines
18 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.
# LTJT 项目交接(归档快照)
last_updated: 2026-08-15
## 一分钟恢复上下文
新对话或新执行者按以下顺序恢复:
1. 先读本文件,了解当前版本、边界、风险和下一步决策。
2. 再读 [生命周期发布门槛](agent设计规范/test-fixtures/lwlt-lifecycle/release-gate.md)、[运营需求能力矩阵](agent设计规范/test-fixtures/lwlt-lifecycle/operations-requirement-matrix.md) 和 [风险登记](agent设计规范/test-fixtures/lwlt-lifecycle/risk-register.md)。
3. 开发前读 [开发维护规范](开发维护规范.md) 和 [业务适配登记表](agent设计规范/business-adaptation-registry.md),再进入对应业务页、Skill、Schema、mapping 和插件源码。
4. 先运行 `git status --short`。当前工作树包含尚未统一提交的有效项目改动,禁止使用 `git reset --hard`、`git clean` 或批量回退。
5. 除非用户重新授权真实测试,不进入 ERP、不创建测试订单,也不复用历史任务号、团号、子单号或安排行号。
## 当前结论
2026-08-16 当前插件发布为 `0.5.123`:无编号生命周期业务统一按业务主条件检索,产品和领队仅做候选补充校验。独立团的主条件为预订客户 + 出发日期;无客户的散拼母团计划修改按出发日期检索;散拼子单先定位母团,再在嵌套子单候选中校验客户、产品和领队。独立团客户检索增加中文分词模糊匹配;客户原生硬筛无结果时自动回退到日期主检索,再做客户、产品、领队候选校验。独立团列表继续兼容行级 `OPEN_update(...)` 与嵌套表格包装,避免 ERP 有结果而插件解析为 0。安排类和完整编号精确路径不变。独立团修改保留用户明确的多个目标字段,当前插件新增 SGL/TWN 房型到 `frenshu0`/`frenshu1` 的 set-only 映射,并要求保存后 fresh 回查;成人/占床儿童/领队人数映射继续保留,其余未验证宽字段仍转人工复核。本轮没有写入 ERP。
本轮用户任务的客户+日期定位与 Agent 解析均已通过;旧插件仅因 `rooms.SGL`/`rooms.TWN` 未列入白名单而在生命周期预检安全阻断,`no_erp_write=true`。0.5.123 已完成房型字段映射、非负校验和新表单回查门禁;需重载后用授权测试对象进行新任务实测。
17:26 与 18:32 两次解析日志均阻断于 `operation_contract_validation`,未进入插件或 ERP。项目内 Agent Schema 已允许多目标;直接请求重载后的 `8765` 也已用同一原始指令通过。18:32 的全新会话仍显示旧白名单,最终定位为 `8786` 控制面自 14:44 起未重启:控制面在启动时直接导入并缓存 `external-agent-client.mjs`,所以只重载独立适配器 `8765` 不会更新界面任务的解析 Worker。18:35 已重启 `8786`,新进程加载当前源码,数据库、AI 和 AgentBus 均就绪。以后修改解析器、Prompt 契约或 Agent Schema 后必须同时重启控制面。
18:40/19:04 新任务均已通过最新解析契约,正确保留 `pax.adult=8`、`pax.child_bed=1`、`pax.leader=1`。18:40 的阻断是选填产品被送入 ERP 原生订单列表硬筛选,0.5.119 已修复;19:04 已确认产品不再硬筛选,但 ERP 行解析仍得到 0 候选,0.5.120 增加行级动作和嵌套表格兼容。两个任务均 `no_erp_write=true`。
当前项目交付物统一由 `/Users/inmanx/Documents/lwltAPI/dist/` 管理:插件 0.5.123、五个 Skill 0.5.118 和 DOCX 0.5.118。桌面不再保留当前活动副本;之前的桌面副本已可恢复地移入 `/Users/inmanx/Desktop/LTJT-历史版本归档/`。Chrome 当前仍需通过扩展管理页重载 0.5.123;重载后再以平台 PING 验证,ERP 会话在线且本轮未执行真实保存。
当前五个 Skill 与 DOCX 仍使用统一的 `0.5.118` 交付物;0.5.123 只修改插件房型执行映射和平台白名单,不需要重新打包 Skill 或 DOCX。当前制品哈希见下方清单。
2026-08-15 解析契约修复:日志确认外部 Agent 首轮和同会话修复轮次都把 `operation.data.customer` 返回为字符串,宿主已正确阻断,未进入插件或 ERP。平台每次解析/修复消息现显式要求 `customer`、`product`、`leader`、`resource`、`supplier` 等命名引用必须为 `{name, keyword}` 对象,主提示词副本同步,回归通过;本轮未修改插件执行逻辑和版本。
上一轮更新(插件 0.5.108 / Skill 0.5.111):散拼母团计划收客数在无团号时只要求出发日期,预订客户、产品和领队可选;母团计划领队检索映射 ERP `S_youkexinxi`(接团/接送地点/标志),独立团订单列表仍映射 `S_lingdui`。名单导入适配器当前只写游客名单并保护接送电话,`leader` 在该流程中仍是可选定位字段,未被误写到联系人/电话。该版本及其制品仅作历史记录。
以下紧接的 0.5.107 及更早条目仅作历史记录;当前版本、交付物和哈希以本段及“当前交付物”新增条目为准。
当前插件源码和制品为 0.5.123:酒店、大交通、其他/备案均在各自统一选择框的组合显示文本上匹配,忽略分隔符并支持不连续关键词;同一酒店或结算单位多条候选按下拉顺序默认选择第一条,再调用原生 `SetValToObj` 由 ERP 带入只读房型、车票/控位说明、项目及其他联动字段。其他/备案只要求团号、业务日期、结算单位搜索,数量可选,省略时保留 ERP 默认值;大交通仍要求数量,酒店新增状态固定为“未安排”。无编号生命周期业务不再把产品/领队作为 ERP 原生硬筛选,而是在主条件检索后的候选行上补充校验;客户字段支持中文分词匹配,客户硬筛无结果时回退到日期主检索;独立团候选还兼容行级更新动作和嵌套表格包装。独立团修改保留多字段目标,0.5.123 新增 SGL/TWN 房型到 `frenshu0`/`frenshu1` 的 set-only 映射,成人/占床儿童/领队人数映射和 fresh 回查继续保留,其他未验证字段进入人工复核。0.5.121 插件包已移入 `archive/releases/2026-08-15/`,Skill 与 DOCX 继续使用 0.5.118;ERP 未写入真实业务数据。
- 当前 Chrome 会话插件:`0.5.121`(数据库心跳已核实);0.5.123 制品已就绪但尚未完成扩展管理页重载,平台自动化仍保持安全不写入。
- 当前主提示词:`ltjt-agent-prompt-v1.4-updating-wide-parse`;安排其他/备案缺少项目或数量时不再向用户追问,独立团修改可保留多个识别出的目标字段。
- 当前生命周期契约:`ltjt-lifecycle-v2.8-updating-wide-parse-2026-08`。
- 发布判断:已验证核心窄能力可提交业务审批;运营宽能力继续失败关闭,尚未统一正式放行。
- 0.5.86 已完成“轻量前门禁 → ERP 只读唯一解析 → 严格写前门禁”的工程接驳;0.5.87 为首次对象定位补执行日 ±1 年日期窗;0.5.88 完成客户来源关键词唯一解析与母团产品来源读取;0.5.89 加入名单真实游客位与按序号安全合并;0.5.90 补齐写前归属复核日期窗;0.5.91 统一全业务自动确认,并将名单写前 slot capacity 与写后非空持久行分离;0.5.92 修复扩展重载后遗漏 `8786` 平台页导致的全自动交接等待,并为 ERP 编号零/多候选提供直接错误提示;0.5.93 在不增加 action 或状态机的前提下,为九条受影响流程接入“预订客户 + 出发日期 + 可选产品/领队”的原生唯一检索,安排类仍保持编号必填。
- 用户删除旧测试订单后,2026-08-13 又产生三条独立团回执 `LW-260903A-A`、`LW-260905A-A`、`LW-260930A-B` 和三条散拼母团 `LW-260907A-B`、`LW-260915A-A`、`LW-260926A-A`;散拼子单失败任务在写前阻断、没有创建子单。当前清理状态不能假定为空。
- 最近一次工程门槛:控制面 `37/37`、插件/解析/生命周期 `189/189`,本轮生命周期定向 `40/40`;TypeScript、变更 JS 语法、`git diff --check`、业务模板回归和版本化 `.zip/.skill` 完整性检查通过。无编号散拼子单客户/日期主定位、客户中文分词匹配与日期回退、产品/领队补充校验、散拼子单母团筛选、散拼子单领队严格门禁、安排类组合候选、首条选择、原生联动和可选数量解析态均有回归覆盖。
- 最近完整生命周期事实来自第四轮真实运行,并在 0.5.81 收敛;原需求 17/18 的窄修改事实来自 0.5.84。全量 16/16 名单仍有真实证据;原 2 行部分名单已真实保存,0.5.91 对同一 operation 只读回查得到 2/2 投影一致并将任务收敛为 completed,没有追加 ERP 写入。
## 系统链路
`平台任务/会话信封 → Agent Prompt + Skill → agent_operation(解析态)→ 插件前门禁 → ERP 只读唯一解析 → execution operation → 严格写前门禁 → ERP 原生操作 → fresh requery`
职责边界:Agent/Skill 只负责意图、用户业务事实、归一化和解析态 operation;不查询业务对象、不生成内部引用、不接触插件门槛。平台任务 ID、会话、执行 ID、收件时间、批次进度、确认、重要摘要、事件和用户通讯只留在平台/插件任务信封。当前执行契约的 `operation.source` 仅允许显式历史测试使用的 `test_context`。插件在已登录 ERP 会话内把业务可见编号与关键词唯一解析为执行态引用,再做严格校验和确定性执行。解析通过不等于业务执行成功。
当前重要边界:散拼新增子单、名单、三类窄修改、取消/恢复和导出可按预订客户与出发日期检索,产品名称和领队只用于收窄;完整团号/订单号仍可直接使用。散拼新增子单的客户属于新子单,不能当作母团客户筛选。安排和变更安排仍要求编号。插件只接收 ERP 原生检索后的唯一对象,零候选、多候选或已提供筛选控件缺失均在写入前停止。历史显式 `TEST-202609` 上下文仍走原测试限制,删除仍只允许测试清理。
## 当前已验证能力
| 能力 | 当前开放边界 |
|---|---|
| 四条创建路线 | 独立团单个/批量、散拼单个母团与具体子单、散拼批量;逐日期保留响应和回查 |
| 名单导入 | 独立团和具体散拼子单;全量 16/16 已真实验证。0.5.91 支持按明确序号补录,空行可填、同值幂等、已有不同内容需确认覆盖、未指定非空行保持不变;真实部分补录 2/2 已通过只读 fresh requery |
| 五类安排 | 导游、车辆、大交通、其他/备案为未确认测试态;酒店新增为未安排,资源/房型由唯一 ERP 模糊匹配带入;全类支持当前运行精确 `clear` |
| 独立团修改 | 保留全部识别出的目标字段;仅当前已验证字段自动执行,其余进入人工复核 |
| 散拼母团修改 | 仅 `planned_capacity` |
| 散拼子单修改 | 仅最终长度不超过 50 的 `lodging_note` |
| 酒店安排修改 | 仅唯一、未安排或未确认测试行的 `end_date` 和/或 `room_count` |
| 取消与恢复 | 独立团、母团、子单;恢复只走编辑页,母团恢复后子单需单独核验 |
| 导出团队文件 | `confirmation_export` 只读取并校验 ERP 文件源;不代表下载、转换、定时或传输 |
| 删除 | 仅测试运行内部收尾,必须满足标记、账号归属、允许清单、证据冻结和 fresh absence requery |
## 继续阻断的范围
- 独立团日期、客户、团号、产品、人数、非标间房型、备注、行程、OP/销售、航班、接送机等宽字段。
- 非酒店安排的 update;酒店的入住日、酒店、房型、备注以及已确认、已落实、出票等状态变更。
- 文件下载、DOC→DOCX、自动触发、平台传输、外部发送或通知。
- 客户、导游、酒店、供应商等主数据维护。
- 真实收款、结算、采购、付款、审核及其他财务动作。
- 把代表对象验证外推为每个批量对象都完成了名单、安排和导出。
## ERP 安全事实
- 产品和客户必须分别唯一解析;产品含地域词时,客户来源必须兼容。来源不一致可能表现为超时或 HTTP 500。
- 写入状态不确定时先只读回查,禁止自动重试。
- 修改类只接收用户目标值;系统自行读取当前值并生成 before/after,不向用户索取旧值或内部 ID。
- 目标值已经等于当前值时,不派发字段事件,并在原生提交前以 `write_attempted=false` 阻断。
- 母团不能代替具体子单执行名单导入或团队文件导出。
- ERP HTTP 200、文件源响应或页面提示都不能单独代替写后回查。
## 权威入口
当前实现事实按以下顺序解释:
1. [开发维护规范](开发维护规范.md)
2. [业务适配登记表](agent设计规范/business-adaptation-registry.md) 与对应业务一页式入口
3. [业务行为登记表](agent设计规范/business-behavior-registry.md)
4. [主提示词](agent设计规范/agent-prompt.md) 与五个 Skill
5. [Agent 解析态 Schema](schemas/agent_operation.schema.json)、[解析结果 Schema](schemas/agent_parse_result.schema.json)、[执行态 Schema](schemas/standard_system_operation.schema.json) 与 ERP mappings
6. `tools/`、`chrome-extension/`、`control-plane/`、`LianSyn-platform/` 的当前源码
7. [生命周期发布门槛](agent设计规范/test-fixtures/lwlt-lifecycle/release-gate.md) 与不可变证据
`archive/` 只供追溯,`dist/` 只放交付物,`reports/` 只接收临时运行输出;三者都不能反向定义业务规则。
## 当前交付物
- 当前交付物不再从桌面读取;桌面历史归档仅用于追溯和恢复
- `dist/ltjt-order-assistant-0.5.123.zip`、`dist/ltjt-order-assistant.zip`
- `dist/lwlt-arrangement-0.5.118.skill`、`dist/lwlt-confirmation-0.5.118.skill`、`dist/lwlt-lifecycle-0.5.118.skill`、`dist/lwlt-newbooking-0.5.118.skill`、`dist/lwlt-updating-0.5.118.skill`
- `dist/老挝联泰AI指令表-0.5.118.docx`(项目内唯一当前 DOCX 交付物)
- 旧版本包:`archive/releases/2026-08-15/插件/`、`archive/releases/2026-08-15/Skill/`
历史 0.5.107 插件 ZIP 的 SHA-256:
`4e205a118be999e0f0f92d31d97985f152957e26be3454c46bdf9c9e7a89532a`
当前 0.5.123 插件、0.5.118 五个 Skill 与 DOCX 制品 SHA-256:
- `ltjt-order-assistant-0.5.123.zip`: `e7cf3097cb78ad237f56ff22161fcda2a32d55c8df6e628a1e4818b527cac637`
- `lwlt-arrangement-0.5.118.skill`: `aa180c527cb6ac51763f710ef79f475ca0a0f79f71eebdb74cc018b8ec9a8c92`
- `lwlt-confirmation-0.5.118.skill`: `a0bda2922dda6316aa6e8a21335b2539021b9e7e756645c6be8ba9d7eda8d515`
- `lwlt-lifecycle-0.5.118.skill`: `0c472cf59e25060c93f1f9bad7dd209454f251c7cd7556b04351a8bb01463d98`
- `lwlt-newbooking-0.5.118.skill`: `cfa4c6c081d5843b98db949214c18ae492a13c1a47ca19258fc5d75e611a9f95`
- `lwlt-updating-0.5.118.skill`: `77ddd502b253efd84f47922569e9626b1954fb7b054a9f030848ddc85fa71dab`
- `老挝联泰AI指令表-0.5.118.docx`: `cf7d90ec4049d83a053272f23100b13bafef599722f2beb1e64502e2a404fbb0`
## 验证与启动
```bash
npm test
npm run build
npm run dev
```
- 正式操作台:`http://127.0.0.1:8786/`
- 独立解析适配器:`npm run start:platform-adapter`,默认 `http://127.0.0.1:8765/`
- Codex 环境若没有全局 Node,应先加载工作区依赖,把返回的 Node `bin` 加入测试子进程路径,再分别执行 `pnpm run check`、`pnpm run test:control-plane`、`pnpm run test:legacy` 和 `pnpm run build`。仅调用 `pnpm test` 仍可能因脚本内部找不到 `npm` 而在测试启动前失败。
- 真实 ERP 测试必须另行获得本轮授权,并建立新的运行 ID、9 月日期、合成数据和精确清理允许清单。
## 归档位置
- 首代 API/适配架构研究:[archive/research/2026-07-07](archive/research/2026-07-07/README.md)
- 完整历史规划日志:[archive/project-history/2026-08-12](archive/project-history/2026-08-12/README.md)
- 0.5.84/0.5.85 历史里程碑包:[archive/releases/2026-08-12](archive/releases/2026-08-12/README.md)
- 0.5.86—0.5.92 历史候选包:[archive/releases/2026-08-13](archive/releases/2026-08-13/README.md)
- 2026-08-10 原始测试报告:[archive/evidence/2026-08-10](archive/evidence/2026-08-10/README.md)
- 2026-08-10—12 生命周期 live/E2E 原始证据:[archive/evidence/2026-08-12/lifecycle-validation-campaign](archive/evidence/2026-08-12/lifecycle-validation-campaign/README.md)
- 0.5.93—0.5.122 及更早的项目插件/Skill 历史包:[archive/releases/2026-08-15](archive/releases/2026-08-15/README.md)
## 下一步决策
当前没有自动续跑的业务任务。项目内五个 Skill 与 DOCX 维持 0.5.118 统一交付基线,主提示词和解析 Schema 使用各自当前契约版本;插件及平台最低版本已升至 0.5.123。无编号生命周期业务只把客户/日期等业务主条件送入 ERP 原生列表,产品/领队改为候选补充校验;客户支持中文分词匹配,硬筛无结果时回退到日期主检索;独立团候选兼容 ERP 行级更新动作和嵌套表格包装,独立团修改保留多字段目标,当前插件新增 SGL/TWN 房型与三类人数映射,未验证字段转人工复核。控制面和 AgentBus 已就绪,Chrome 待重载 0.5.123,ERP 会话在线但本轮没有真实业务写入。0.5.121 插件已移至 `archive/releases/2026-08-15/`;外部 Agent Profile 仍由独立部署管理,本轮未修改云端。重载后先以新任务验证 SGL/TWN 与成人/占床儿童/领队字段的真实保存与回查,业务执行侧再由负责人选择:
1. 按已验证窄能力分批放行;或
2. 在下一条新的 AgentBus 业务中观察 `confirmation_mode=automatic`与无人工停顿,不重放已完成的 2 行名单;或
3. 继续逐字段研究尚未开放的宽修改;或
4. 单独开发团队文件下载、处理与传输平台模块。
未经明确选择,不扩大能力白名单,也不创建新的真实测试数据。