diff --git a/.gitignore b/.gitignore
index e70cd97..8df0ec2 100644
--- a/.gitignore
+++ b/.gitignore
@@ -18,6 +18,8 @@
*.h2.db
client/node_modules/
+# 同时忽略复用本机依赖的符号链接。
+/client/node_modules
client/dist/
client/dist.zip
client/.vite/
diff --git a/.project-docs/00-brief/project-positioning.md b/.project-docs/00-brief/project-positioning.md
index 856eac3..affd31d 100644
--- a/.project-docs/00-brief/project-positioning.md
+++ b/.project-docs/00-brief/project-positioning.md
@@ -18,6 +18,12 @@ TH Hotel Simple 是一个把邮件与附件来源事实转化为可审计、可
- 当前不执行 PMS、Opera、OHIP、付款或库存写操作。
- 当前不让外部 Agent 直接覆盖来源事实、创建最终业务状态或绕过人工确认。
+## Current Release Scope — 2026-09-08
+
+- 本期邮件业务范围为QBD、普通LianTai,以及`opfit.liantaitravel@gmail.com`通知专用规则。
+- 其他发件人的通用邮件处理不属于本期;从有效需求、开发待办和验收/上线阻断中撤下,未来不自动恢复。
+- 现阶段继续在5178测试和修改已有功能。正式数据库、账号权限、监控告警及部署验收在准备上线时安排,不阻断本地测试。
+
## Core Constraints
- SourceMessage、Parser observation、evidence 与用户确认必须可追溯。
diff --git a/.project-docs/10-decisions/adr-007-liantai-qbd-shared-parser-agent-profile.md b/.project-docs/10-decisions/adr-007-liantai-qbd-shared-parser-agent-profile.md
index f591624..0297e2c 100644
--- a/.project-docs/10-decisions/adr-007-liantai-qbd-shared-parser-agent-profile.md
+++ b/.project-docs/10-decisions/adr-007-liantai-qbd-shared-parser-agent-profile.md
@@ -15,7 +15,7 @@ QBD 已有确定性工作簿 Parser、字段 Recovery 和 message-level Parsing
1. QBD与LianTai只维护一套固定渠道Parser Core和一套message-level Parsing Agent。
2. sender、Workbook/Header、日期/动作语法和模板噪音作为版本化Profile规则;Observation、evidence、identity、source-room、合并、Agent contribution和卡片投影保持共享。
-3. LianTai sender由系统现有精确路由进入active Profile;本期固定渠道只允许QBD与LianTai,其他sender走通用非本期渠道路径。
+3. LianTai sender由系统现有精确路由进入active Profile;本期固定渠道只允许QBD与LianTai,其他sender的通用处理不在本期范围内,不表示已有或计划中的通用处理路径。
4. Field Recovery继续只处理精确未决字段;message-level Parsing Agent只处理消息/G-I语义贡献和受控fallback。Parser确定性事实不可被任一Agent覆盖。
5. Layer 3只保存确定事实、raw detail、中立 `STRUCTURED_MENTION` 和员工展示信息;不得决定最终业务类型、Trace、linked action、部门或TaskCard字段。
6. Layer 5 Booking Agent判断中立结构是否形成`TRACE_RESERVATION_NOTES`或其他业务候选,并只在证据明确时提出部门候选;不明确时保持空,由Layer 6 Validator阻断并交员工确认。
diff --git a/.project-docs/10-decisions/adr-011-layer5-final-business-authority.md b/.project-docs/10-decisions/adr-011-layer5-final-business-authority.md
index 3d7977b..7a31b39 100644
--- a/.project-docs/10-decisions/adr-011-layer5-final-business-authority.md
+++ b/.project-docs/10-decisions/adr-011-layer5-final-business-authority.md
@@ -8,9 +8,8 @@ Accepted — Architecture Correction / Implementation Authorized / Runtime Relea
2026-08-12
-> 2026-09-08修订:ADR-036不改变Layer 5的唯一业务判断权,但修订通用发件人路径的无任务终态。
-> 通用路径无法形成具体预订任务,或Agent/系统失败后仍无具体任务时,输出`GENERAL`其他通知而不是Risk通知;
-> QBD与普通LianTai的既有Risk规则不变。
+> 2026-09-08范围纠正:其他发件人的通用处理已撤出本期,ADR-036不再修订本期结果处置规则。
+> QBD与普通LianTai沿用既有规则;通知专用邮箱按ADR-032执行确定性其他通知例外。
## Context
diff --git a/.project-docs/10-decisions/adr-012-booking-business-agent-v1-rules.md b/.project-docs/10-decisions/adr-012-booking-business-agent-v1-rules.md
index e116a3b..64579c1 100644
--- a/.project-docs/10-decisions/adr-012-booking-business-agent-v1-rules.md
+++ b/.project-docs/10-decisions/adr-012-booking-business-agent-v1-rules.md
@@ -8,6 +8,11 @@ Accepted / Amended By ADR-021 / Durable Runtime Implemented Locally / External R
2026-08-13
+## Current release scope — 2026-09-08
+
+本期预订处理范围为QBD与普通LianTai;ADR-032通知专用邮箱是无需调用Booking Agent的明确例外。
+其他发件人的通用邮件处理已撤出本期,ADR-036不作为本ADR的入站资格修订或待实施承诺。
+
## Context
ADR-011 已将 Booking 业务判断权放入 Layer 5,但仍允许明确 New/Update/Cancel 由本地决策器直接返回,并把
diff --git a/.project-docs/10-decisions/adr-032-liantai-fit-notification-only-sender.md b/.project-docs/10-decisions/adr-032-liantai-fit-notification-only-sender.md
index 9e80da5..e520ecd 100644
--- a/.project-docs/10-decisions/adr-032-liantai-fit-notification-only-sender.md
+++ b/.project-docs/10-decisions/adr-032-liantai-fit-notification-only-sender.md
@@ -2,11 +2,11 @@
## Status
-Accepted / Implemented Locally / Publication Policy Amended By ADR-033 / Deployment Pending
+Accepted / Publication Amended By ADR-033 and ADR-034 / Replay Exception Amended 2026-09-08 / Runtime Verification Pending
## Date
-2026-09-07
+2026-09-07;回放例外于2026-09-08由用户批准。
## Context
@@ -24,8 +24,16 @@ QBD/普通 LianTai 固定提取渠道,也没有独立提取规则;若继续
4. 复用现有可信通知保存与投影链、来源权限和投影回执;重复处理同一运行不得重复创建通知。
5. `opfit.liantaitravel@gmail.com` 是通知专用发件人,不是新的固定渠道/Profile/Parser 白名单。
普通 `op.liantaitravel@gmail.com` 与 QBD 的现有提取规则保持不变。
-6. 强制要求真实双 Agent 的调试回放继续保留原门槛;该调试模式不把通知专用来源伪装成一次双 Agent 成功。
-7. 按ADR-033,正式处理能力启动后,该可信通知自动进入员工工作台,不再等待独立通知发布开关;调试回放仍不进入工作台。
+6. 2026-09-08用户批准[统一处理记录改造](../../docs/project/requirements/CR-20260908-agentbus-unified-records.md),
+ 明确修订原“通知专用来源不能走严格回放”的限制。新回放仍为`FRESH_DELIVERY + REQUIRE_REAL_L3_L5`,
+ 但准确命中本规则时允许复用通知分支,豁免不适用的Parser、Parsing Agent和Booking Agent;其他固定渠道
+ 继续要求真实双Agent,不恢复历史兼容执行,不改变Agent/Profile/版本/Secret。
+7. 按ADR-033及ADR-034,正式收件和FRESH回放的可信通知都复用同一员工“其他通知”投影;
+ `PRESERVE_IDENTITY`仍排除。通知保存及投影成功后系统处理结束,不等待员工已知悉;投影失败属于系统异常。
+8. 统一全流程详情保留现有步骤:Layer1/2完成,Layer3/4灰色“已跳过”;Layer5明确区分
+ “Booking Agent已跳过”和“通知结果生成已完成”,Layer6完成通知有效性校验。
+ 只完成通知生成,不能宣称Booking Agent执行成功。成功后默认选择Layer5,不覆盖用户已手动选择的阶段。
+ 自动收件与手动上传共用同一处理链和Trace,不另建Parser、Agent或业务流程。
## Rationale
@@ -48,6 +56,7 @@ QBD/普通 LianTai 固定提取渠道,也没有独立提取规则;若继续
- [ADR-016](adr-016-validated-workbench-projection.md)
- [ADR-030](adr-030-unified-attention-queue.md)
- [ADR-033](adr-033-automatic-workbench-publication.md)
-- [ADR-036](adr-036-all-sender-booking-intake-and-notification-fallback.md)
+- [ADR-034](adr-034-5178-employee-workbench-separation.md)
+- [统一记录接口与展示契约](../../docs/project/frontend-backend/agentbus-eml-records-integration-guide.md)
- [Business Rules](../40-domain/business-rules.md)
- [Data Flow](../20-architecture/data-flow.md)
diff --git a/.project-docs/10-decisions/adr-036-all-sender-booking-intake-and-notification-fallback.md b/.project-docs/10-decisions/adr-036-all-sender-booking-intake-and-notification-fallback.md
index f244519..5576475 100644
--- a/.project-docs/10-decisions/adr-036-all-sender-booking-intake-and-notification-fallback.md
+++ b/.project-docs/10-decisions/adr-036-all-sender-booking-intake-and-notification-fallback.md
@@ -1,105 +1,26 @@
-# ADR-036:所有发件人进入邮件处理,固定渠道只决定处理方式
+# ADR-036:其他发件人通用邮件处理已撤出本期
## Status
-Accepted Product And Routing Architecture / Implementation Pending
+Withdrawn From Current Release / Not Scheduled
-## Date
+## Scope clarification — 2026-09-08
-2026-09-08
+用户明确:“其他发件人的通用邮件处理本期不管”,并要求清理残留产品记录。
+本条原有全发件人通用处理方案不再作为有效的本期需求、开发待办、测试完成条件或上线阻断。
+本文件仅保留撤回标记,避免旧链接或历史核查再次把它恢复为待实施项目;没有安排后续开发日期。
+如未来重新纳入,须以届时新的明确需求为准。
-## Context
+## Current release
-当前正式预订处理只为QBD与普通LianTai建立了完整的固定渠道能力。其他发件人的邮件虽然可以保存为来源邮件,
-但后续输入、渠道类型、房型和价格处理仍依赖QBD/LIANTAI,不能稳定形成业务任务或员工通知。
-
-酒店已进一步确认:发件人不应再决定一封邮件“是否有资格被处理”。除已经确认无需预订处理的
-`opfit.liantaitravel@gmail.com`外,其他发件人的邮件都应被系统尝试理解;固定渠道身份只用于选择更准确的处理方法。
-
-## Decision
-
-1. 所有合法入站邮件都必须保存来源并得到员工可见的最终去向,不得因为sender不在QBD/LianTai名单内直接放弃、
- 静默失败或永远停在后台。
-2. 规范化后的唯一真实发件人精确等于`opfit.liantaitravel@gmail.com`时,继续执行ADR-032:在保存来源邮件和
- 附件身份后、读取或下载附件内容及调用任何Agent前尽早分流,直接生成一条`GENERAL`“其他通知”;不解析正文或表格、
- 不调用Parsing Agent或Booking Agent、不生成订单任务、任务卡或预订记录。
-3. 普通LianTai与QBD继续执行各自现有固定渠道规则,包括专用表格识别、Parsing Agent、渠道房型/价格规则和
- Booking Agent流程;本决定不放宽或改写其冻结契约。
-4. 除上述三类外的其他发件人进入“通用邮件处理”路径。系统可以阅读Current邮件正文和获准处理的附件,尝试识别
- 是否存在预订业务、业务类型、目标和可提取要素,但不得把未知来源伪装成QBD或LianTai,也不得套用其渠道专用规则。
- 通用路径使用独立的材料识别与解析能力,从中性订单上下文、统一Booking业务判断、校验和员工工作台开始复用后半段。
-5. 通用邮件处理结果按以下产品口径进入现有员工工作台:
- - 已经形成具体预订任务且校验通过:进入“待确认”。
- - 已经形成具体预订任务,但仍需员工复核:保留预订任务身份并进入“人工处理”。
- - 无法形成具体预订任务:统一生成`GENERAL`“其他通知”。这包括明确无预订动作、信息不足、附件不认识、
- 处理结果不确定,以及Agent或系统失败后仍没有形成具体任务的情况。
-6. “人工处理”的具体预订任务只展示系统已经提取到的内容;没有提取到的要素保持空白。无法形成任务而进入
- “其他通知”的邮件也可以展示已提取内容和来源邮件,未提取要素保持空白。页面不需要向员工解释
- “为什么没有自动生成任务”,技术原因和内部判断原因只留给审计、运行排查与后续改进。
- 通用来源无法可靠确定的渠道、公司、Rate、Room及其他固定渠道资料也保持空白,不借用QBD/LianTai默认值。
-7. “人工处理”只承接已经形成的具体预订任务;员工完成必要复核并确认后,按现有规则建立或归入预订记录。
- “其他通知”的确认只表示员工已查看/已处理这封邮件并退出待处理列表,不建立或更新预订记录。
-8. 无论业务无法识别还是系统处理失败,每封已接收邮件最终都必须形成预订任务或员工通知之一;不能只留下员工不可见的
- FAILED运行记录。
-9. 现有来源留存、酒店隔离、权限、审计、重复保护、版本和员工确认边界继续适用;本决定不增加PMS/Opera写入。
-
-## Rationale
-
-- 发件人只能帮助选择最佳识别方法,不能可靠代表邮件是否包含预订业务。
-- QBD与普通LianTai已有稳定的专用模板和目录规则,应继续保留其准确性,不为支持其他来源而退化为通用猜测。
-- 员工工作台已经具备“待确认、人工处理、其他通知”三个去向,无需新增一级入口或让员工理解系统内部失败过程。
-- 对每封邮件保证一个员工可见结果,能够避免真实邮件已进入系统却无人看见、无人确认。
-- 以“是否已经形成具体预订任务”区分人工处理和其他通知,可以让同一目录名称与后续记录动作保持一致:
- 有任务才可能进入预订记录,没有任务只完成邮件知悉。
-
-## Seven-Layer Change Shape
-
-1. **Layer 1 接入**:所有合法邮件统一保存;新增`通知专用 / QBD / 普通LianTai / 通用`四种处理路径标记。
- sender只选择路径,不再决定邮件是否处理。
-2. **Layer 2 材料**:QBD/LianTai保持现有模板与附件规则;通用路径独立读取获准的Current正文与安全附件;
- 不认识的附件形成可见人工处理结果,不把整封邮件判成后台失败。通知专用路径只登记附件身份,不读取内容。
-3. **Layer 3 解析**:固定渠道继续使用冻结Parser与Parsing Agent;通用路径新增中立提取能力,输出相同性质的来源事实、
- 原文和材料问题,缺失项不猜测、不套用固定渠道规则。
-4. **Layer 4 上下文**:复用公共订单、目标和住期结构;只有QBD/LianTai进入现有渠道Rate/Room目录。通用来源仅在有
- 独立可靠依据时填写规范值,否则保持空白并交给后续判断。
-5. **Layer 5 决策**:除通知专用路径外,复用统一Booking业务判断。能够形成具体预订任务时输出任务;无法形成任务时
- 输出`GENERAL`其他通知。本地入口和关键词不得提前替它判型。
-6. **Layer 6 校验**:全路径只保留一套Layer 6,不为通用邮件复制第二套校验层。公共入口删除“必须是QBD/LianTai”
- 的全局前提,并按处理路径启用三类规则:所有邮件结果执行来源归属、证据引用、重复、基础格式与处理结果未被改写等
- 公共有效性检查;QBD/LianTai任务在此基础上继续执行现有渠道目录、房型、Rate、早餐及Layer 4等值校验;通用邮件
- 不要求具备固定渠道身份或目录结果,只校验已经形成的任务及已经提取到的字段,未提取字段保持空白;通知专用邮箱则
- 校验结果只能是“其他通知”,且没有Agent调用和预订任务。任务或通知的判型仍属于Layer 5,Layer 6只校验,不改型。
- 具体任务校验通过则进入待确认,需要员工复核则以任务身份进入人工处理;没有形成具体任务,或Agent/系统失败后仍无
- 任务时,必须进入其他通知,不能只留下不可见FAILED。
-7. **Layer 7 展示确认**:复用现有“待确认 / 人工处理 / 其他通知”三个入口和来源邮件详情,不新增一级菜单。
- 待确认和人工处理中的具体预订任务确认后建立或归入预订记录;其他通知确认只记录已处理并退出队列。
-
-## Consequences
-
-- 当前仅支持`QBD/LIANTAI`来源类型的正式输入与Layer 4不能直接满足本决定;需要新增真正的通用来源处理能力,
- 不能只删除sender校验。
-- 严格真实回放和正式邮件处理均需允许其他发件人进入通用路径,不再以“非固定渠道”为终止原因。
-- 通用路径不复用QBD/LianTai固定Parser、Parsing Agent规则或Rate/Room目录;新增通用材料/解析能力,并复用Layer 5
- Booking业务判断、Layer 6校验和Layer 7工作台。Layer 4只复用中性结构。具体输入契约、支持的附件类型、重试和
- 回退状态仍需在实施前形成Change Request。
-- 验收矩阵至少覆盖通知专用邮箱、QBD、普通LianTai、可自动处理的其他发件人、需要人工复核的具体任务、
- 无预订动作、信息不足/附件不认识/不确定且无法形成任务的其他发件人,以及Agent/系统失败后的其他通知回退。
-
-## Amends
-
-- [ADR-011](adr-011-layer5-final-business-authority.md):通用路径无法形成具体任务时以`GENERAL`其他通知收口,
- 不沿用固定渠道的Risk通知终态;Layer 5唯一业务判断权不变。
-- [ADR-012](adr-012-booking-business-agent-v1-rules.md):将“白名单入站才处理”改为“除通知专用邮箱外,所有入站邮件都尝试处理”。
-
-## Preserves
-
-- [ADR-007](adr-007-liantai-qbd-shared-parser-agent-profile.md)
-- [ADR-008](adr-008-qbd-liantai-parser-fact-material-contract.md)
-- [ADR-032](adr-032-liantai-fit-notification-only-sender.md)
+- QBD与普通LianTai:按现有固定渠道处理规则执行。
+- `opfit.liantaitravel@gmail.com`:按ADR-032保存来源并生成其他通知,跳过不适用的Parser及Agent步骤。
+- 5178:继续测试现有邮件处理、统一处理记录、全流程详情、待处理任务、人工确认和预订记录。
+- 当前允许先在本地5178测试和修改;正式数据库、账号权限、监控告警及部署验收在准备上线时处理。
+- 本次只更新产品与项目记录,不改变现有邮件处理行为、Agent配置或运行环境。
## Related
-- [ADR-030](adr-030-unified-attention-queue.md)
-- [ADR-033](adr-033-automatic-workbench-publication.md)
-- [Business Rules](../40-domain/business-rules.md)
-- [Data Flow](../20-architecture/data-flow.md)
+- [本期范围](../00-brief/project-positioning.md)
+- [当前状态](../30-worklog/current-state.md)
+- [通知专用规则](adr-032-liantai-fit-notification-only-sender.md)
diff --git a/.project-docs/10-decisions/decision-index.md b/.project-docs/10-decisions/decision-index.md
index 341fab1..a6295fe 100644
--- a/.project-docs/10-decisions/decision-index.md
+++ b/.project-docs/10-decisions/decision-index.md
@@ -13,8 +13,8 @@
| ADR-008 | QBD 与 LianTai Parser 使用“确定事实+待处理原文”冻结契约 | Accepted / Frozen / Parser Implemented | 2026-08-11 | Fixed-channel Parser / shared Core / Profile / Layer 3 merge input | [ADR](adr-008-qbd-liantai-parser-fact-material-contract.md) |
| ADR-009 | QBD 与 LianTai 共享 Parsing Agent v1.0 契约;输出为中立 structured mentions | Accepted / Test Profile Bound / Automatic Runtime HOLD | 2026-08-11 | Shared Parsing Agent / QBD / LianTai / Agent-Merger-Booking boundary | [ADR](adr-009-fixed-channel-parsing-agent-v1-contract.md) |
| ADR-010 | 固定渠道 Parsing Agent v1 由信息系统通过持久 worker 调用,并在本地校验和确定性合并 | Accepted / Amended By ADR-018 And ADR-020 / Production HOLD | 2026-08-12 | SourceMessage / Parser / Parsing Agent / Layer 3 merger / Booking worker / SuperAgent adapter | [ADR](adr-010-fixed-channel-parsing-agent-v1-runtime-integration.md) |
-| ADR-011 | 所有 Booking 业务任务、结果处置及 linked/derived action 的最终判断权只属于 Layer 5 | Accepted / Generic No-Task Disposition Amended By ADR-036 / Runtime Release HOLD | 2026-08-12 | Layer 1–7 / Manual EML / AgentBus / V4 compatibility | [ADR](adr-011-layer5-final-business-authority.md) |
-| ADR-012 | 所有白名单入站必须经过 Booking Agent;两道门槛、局部 Risk、未归类原文和逐物理行 Allotment | Accepted / Intake Eligibility Amended By ADR-036 / Durable Runtime Implemented Locally / External Release HOLD | 2026-08-13 | Layer 5–7 / Agent wire / Candidate v2 / Skill | [ADR](adr-012-booking-business-agent-v1-rules.md) |
+| ADR-011 | 所有 Booking 业务任务、结果处置及 linked/derived action 的最终判断权只属于 Layer 5 | Accepted / Runtime Release HOLD | 2026-08-12 | Layer 1–7 / Manual EML / AgentBus / V4 compatibility | [ADR](adr-011-layer5-final-business-authority.md) |
+| ADR-012 | 所有白名单入站必须经过 Booking Agent;两道门槛、局部 Risk、未归类原文和逐物理行 Allotment | Accepted / Durable Runtime Implemented Locally / External Release HOLD | 2026-08-13 | Layer 5–7 / Agent wire / Candidate v2 / Skill | [ADR](adr-012-booking-business-agent-v1-rules.md) |
| ADR-015 | Booking Agent V2 在提交 Layer3/4 后由单一 durable worker 调用,Candidate 是 Layer6 恢复点 | Accepted / Implemented Locally / Deployment HOLD | 2026-08-14 | Layer3–6 / Booking PostgreSQL / SuperAgent / audit | [ADR](adr-015-booking-agent-v2-durable-runtime.md) |
| ADR-016 | 校验终态由独立可信投影器确定性写入 V4 正式订单、任务卡、通知和本地审计 | Accepted / Implemented Locally / Publication Policy Amended By ADR-033 / Deployment Pending | 2026-08-14 | Layer6 terminal / Booking PostgreSQL / V4 MySQL / formal workbench | [ADR](adr-016-validated-workbench-projection.md) |
| ADR-017 | SuperAgent 当前两条主线把全部公开返回与最终答案按原内容写入追加式 Journal | Accepted / Implemented | 2026-08-17 | Parsing/Booking Agent / Booking PostgreSQL / lifecycle log | [ADR](adr-017-superagent-complete-public-response-journal.md) |
@@ -32,11 +32,16 @@
| ADR-029 | Opera独占业务选项来源,产品一级目录收口为三项 | Accepted / Product Design Baseline / Implemented In 5174 | 2026-08-22 | Product navigation / Opera-owned options / showroom routing | [ADR](adr-029-opera-owned-business-options-and-three-root-entries.md) |
| ADR-030 | Risk与复核任务统一进入“人工处理”,不新增后端分类字段 | Accepted / Implemented In 5178 | 2026-09-07 | Pending-work filters / task and notification presentation / frontend routing | [ADR](adr-030-unified-attention-queue.md) |
| ADR-031 | 新版预订记录只由员工确认结果建立,并与旧订单/旧任务物理隔离 | Accepted / Implemented / Identity Amended By ADR-035 | 2026-09-07 | Booking decision boundary / confirmation / reservation records / 5178 | [ADR](adr-031-confirmed-reservation-record-boundary.md) |
-| ADR-032 | LianTai FIT发件人只保留来源并进入普通通知 | Accepted / Implemented Locally / Publication Policy Amended By ADR-033 / Deployment Pending | 2026-09-07 | Sender routing / source retention / ordinary notification | [ADR](adr-032-liantai-fit-notification-only-sender.md) |
+| ADR-032 | LianTai FIT发件人只保留来源并进入普通通知,允许同规则完整回放 | Accepted / Replay Exception Amended 2026-09-08 / Runtime Verification Pending | 2026-09-08 | Sender routing / source retention / ordinary notification / replay applicability | [ADR](adr-032-liantai-fit-notification-only-sender.md) |
| ADR-033 | 正式邮件的可信结果自动进入员工工作台,不设独立发布总开关 | Accepted / Implemented Locally / Replay Isolation Amended By ADR-034 | 2026-09-07 | Formal mail / trusted result / employee workbench / replay isolation | [ADR](adr-033-automatic-workbench-publication.md) |
| ADR-034 | 5178以独立三入口员工工作台承接5174标准,FRESH回放进入同一待办投影 | Accepted / Implemented, Hardened And Real-EML Revalidated Locally / Production HOLD | 2026-09-08 | Product navigation / frontend separation / AgentBus replay / retired modules | [ADR](adr-034-5178-employee-workbench-separation.md) |
| ADR-035 | 预订记录按Group Tour Code与FIT Name 1分别建立身份 | Accepted / Implemented Locally / Group And Missing-Name FIT Runtime Revalidated / Production HOLD | 2026-09-08 | FIT/Group identity / projection / confirmation / confirmed record / schema | [ADR](adr-035-booking-type-specific-confirmed-record-identity.md) |
-| ADR-036 | 所有发件人都进入邮件处理;通知专用邮箱直达其他通知,固定渠道只决定处理方式 | Accepted Product And Routing Architecture / Implementation Pending | 2026-09-08 | Sender routing / generic mail handling / task-notification fallback / employee workbench | [ADR](adr-036-all-sender-booking-intake-and-notification-fallback.md) |
+
+## Withdrawn From Current Release
+
+| ID | Decision | Status | Date | Detail |
+|---|---|---|---|---|
+| ADR-036 | 其他发件人的通用邮件处理 | 用户明确本期不做;不列待开发、待验收或上线阻断,未安排后续开发 | 2026-09-08 | [范围撤回记录](adr-036-all-sender-booking-intake-and-notification-fallback.md) |
## Superseded Decisions
diff --git a/.project-docs/20-architecture/data-flow.md b/.project-docs/20-architecture/data-flow.md
index 654b5d5..f2283bd 100644
--- a/.project-docs/20-architecture/data-flow.md
+++ b/.project-docs/20-architecture/data-flow.md
@@ -6,7 +6,6 @@
|---|---|---|---|
| Neutral intake/materials | AgentBus/Manual EML SourceMessage + Current/History + attachment descriptors | `MaterialPackageV2` | 不根据主题、关键词或附件类型建任务 |
| LianTai FIT notification-only route | normalized exact sender `opfit.liantaitravel@gmail.com` + retained SourceMessage | validated `GENERAL_NOTIFICATION` → existing source-notification projection | 只保留邮件与附件身份;不打开/检查工作簿,不运行Parser、Rooming识别、Layer 4或两个Agent;零订单任务,投影回执保证重试不重复 |
-| General-sender route(routing architecture confirmed / implementation pending) | 除通知专用邮箱、QBD、普通LianTai外的合法入站邮件 | 独立Layer2/3 → 中性Layer4结构 → 复用Layer5–7;具体任务按校验进入待确认/人工处理,无法形成任务统一生成`GENERAL`其他通知 | sender不再是处理资格白名单;不得复用固定渠道Parser/Parsing规则或Rate/Room目录。已提取要素可展示,未提取保持空白;每封已接收邮件必须有员工可见结果 |
| Current Rooming filename snapshot | current-only `.xlsx` identity/bytes + exact `LLT...xlsx` filename | existing `MaterialPackage.current_materials[].attributes` | 流式OOXML包级检查;0行业务扫描;History附件、shared strings和名单明细排除 |
| Neutral Layer 3 | deterministic Parser + compact-handoff Parsing Agent逐项验收结果 | `Layer3ResultV2` | 薄assembler只复制/追加/同值去重/冲突隔离;`SOURCE_ACTION_KIND`仅来源事实;无action hint/Booking Type/business release |
| Deterministic Rooming enrichment | final local Layer3 merge + persisted current attachment snapshots | observation/binding/issue in `Layer3ResultV2` | Parser/Agent结果不改写;成功与技术失败均保留中立Evidence,重放幂等 |
diff --git a/.project-docs/20-architecture/system-overview.md b/.project-docs/20-architecture/system-overview.md
index a59096b..fefc630 100644
--- a/.project-docs/20-architecture/system-overview.md
+++ b/.project-docs/20-architecture/system-overview.md
@@ -1,5 +1,10 @@
# System Overview
+## Current Release Boundary (2026-09-08)
+
+本期邮件处理只覆盖QBD、普通LianTai及ADR-032通知专用邮箱。其他发件人的通用处理已按用户要求撤出本期,不列为开发缺口。
+当前继续5178本地测试与问题修正;正式数据库、账号权限、监控和部署验收留到准备上线时完成。
+
## Product Root Navigation And Runtime Baseline (2026-09-08)
- 5178是后续唯一正式工作台,一级导航固定为:待处理任务、预订记录、AgentBus EML 全流程回放。
@@ -17,6 +22,24 @@
- 生产/default前端构建不包含5174 fixture或BR00路由;显式fixture模式完全替代真实API。旧任务写入口、来源材料和邮件正文分别
受动作权限+酒店校验、认证酒店上下文和纯文本输出保护。登录有单节点用户名/IP限流;多节点必须在部署层补全全局限流。
+## AgentBus EML Unified Processing Records (2026-09-08)
+
+- “AgentBus EML 全流程回放”内默认进入处理记录,另有手动上传测试;自动邮件和已执行EML共用五列紧凑列表。
+ 只支持今天/近7天、发件人搜索、只看异常,按系统入站时间倒序;正常人工业务结果不算系统异常。
+- 新`/api/system/debug/agentbus-eml-records`只读聚合已有SourceMessage、Processing Run和Replay。
+ 自动来源用`source-{id}`,手动来源用`replay-{id}`;上传的来源消息不重复算真实邮件。
+ 真实详情`replay=null`,按来源与运行关联复用原Trace聚合器,不创建第二套处理或日志事实。
+- 详情留在当前模块复用原阶段/输入输出/错误/生命周期及复制导出,URL保存记录身份与列表条件;
+ 原`replay_id`链接继续可读,返回刷新并保留条件,不跳转业务任务或预订记录。
+- 列表仅进入、切回、focus/visibility恢复、按钮、详情返回和条件变化时读取;活动详情单一10秒轮询,
+ 终态、离开、卸载和酒店/记录切换停止,晚响应不得覆盖新记录。
+- ADR-032通知专用邮箱现在允许FRESH回放:Layer3/4跳过,Layer5 Booking Agent跳过而通知生成完成,
+ Layer6校验;必须保存并投影1条其他通知才系统结束,不等待员工ACK,也不生成预订任务或记录。
+ 通知专用身份使用已保存的策略标记,普通GENERAL结果不能自动推定为通知专用分支。
+- 来源规则之外的固定渠道仍保留严格Agent门槛;本改造不修改Profile、版本、Secret或邮件处理主链。
+ 完整接口、就绪门槛、缺失证据与安全边界见[统一记录契约](../../docs/project/frontend-backend/agentbus-eml-records-integration-guide.md)。
+ 本段记录实现结构和已批准边界,不表示本次运行环境已切换或真实邮件已验收。
+
## One Order With Multiple Stay Segments (2026-08-20)
- 新固定渠道运行使用外部 `booking-contracts-v3`:Parser/Parsing Agent 契约不变,Layer 3 下游事实保留
@@ -30,6 +53,7 @@
## V2-Only New EML Execution Boundary (2026-08-20)
- 新 EML 回放只创建 `FRESH_DELIVERY + REQUIRE_REAL_L3_L5` 运行;显式或缺省 `LEGACY_COMPATIBLE` 在持久化前拒绝。
+ 2026-09-08通知专用来源按修订后的ADR-032豁免不适用Agent阶段;其他固定渠道双Agent要求不变。
- AgentBus 捕获 SourceMessage 后,V2 orchestrator 不可用或返回非权威结果时按既有失败/人工路径结束,不调用旧 dispatch Agent。
- 旧 dispatch worker/service/writer 和 Field Recovery 执行实现已物理删除;contracts-v1/Recovery 旧启用键仍由启动门禁拒绝。
- 历史 replay、Processing Run、Trace/lifecycle、SuperAgent Journal 继续只读;历史 `LEGACY_COMPATIBLE` 不允许重新执行。
diff --git a/.project-docs/30-worklog/current-state.md b/.project-docs/30-worklog/current-state.md
index 758e587..2120190 100644
--- a/.project-docs/30-worklog/current-state.md
+++ b/.project-docs/30-worklog/current-state.md
@@ -1,5 +1,88 @@
# Current State
+## 2026-09-09 日志三项准确性修复已加载5178测试环境并完成只读核对
+
+用户确认现有日志给助手分析基本够用,本期仅修正已保存却标未保存、未知用量显示零、自动完成耗时变化;同一终态问题中的Parsing失败提前停刷一并修正,不实施此前广泛日志增强建议。
+独立副本实现并打包,最终1,009项通过、5项原有外部验收跳过,无失败。保留真实原文,按同一次调用核对保存和用量,使用实际自动结束时间,后续员工确认或查看不延长耗时。无Agent或业务规则变更,无真实EML重跑。
+源码已逐文件核对并同步至正式项目,保留既有与并行修改。用户回复“现在切换”后确认队列为空,仅重载8082至PID27766;5178仍为原PID10488。服务健康、酒店身份和全部就绪字段正常,环境文件hash及数据位置未变。
+7条既有记录的原始回答逐条hash均未变;有保存事实的两类回答均显示已保存,未知用量为null。原异常耗时872248ms按PG真实自动结束时间纠正为273183ms(页面273.2秒),重复读取稳定且列表/详情/日志一致。没有新EML执行或外部Agent调用;可继续测试。平台回答缺尾仍是独立问题。详见[修复证据](../50-evidence/topics/2026-09-09-agentbus-log-accuracy-fix.md)。
+
+## 2026-09-09 平台服务器日志补充:续传警告已关联,缺尾根因仍待模型原文
+
+用户提供的rizhi(1)准确覆盖最近两次Replay的四次Agent运行,全部由平台标记success。
+其中三次恢复接收时提示原事件ID不在保留缓冲中;三个ID都能在本系统此前原始接收日志找到,需平台核查续传保留/ID处理。
+最新Parsing没有重连仍缺尾,因此续传不能单独解释全部问题。附件未含模型最终回答、实际停止原因或输出上限;优先用最新Parsing原run对照模型原文与平台最终保存/公开回答。
+只读核对和证据更新,无代码/配置变化;详见[平台日志对照](../50-evidence/topics/2026-09-09-agent-response-reception-audit.md#用户补充superagent服务器日志后的对照)。
+
+## 2026-09-09 已独立排查Agent回答接收侧
+
+绕过本系统直接GET平台原运行:最近两次的四份回答均已缺尾,与系统保存内容逐字/哈希相同;HTTP外层JSON和响应长度完整。较早成功Booking对照仍为完整JSON。
+未发现本系统接丢、拼接或保存截断;现有接收/恢复/日志28项与部署Parser离线23项均通过。直接读取旧run事件流超时,未作为通过证据;平台内部为何提前结束仍需模型原文及结束原因。
+详情因前一步失败提前停刷是已确认的本系统独立缺陷,本轮未改实现。仅只读诊断/离线验证,无新Agent运行或配置变化。详见[接收侧排查证据](../50-evidence/topics/2026-09-09-agent-response-reception-audit.md)。
+
+## 2026-09-09 配置调整后再次测试仍失败(12:00结束)
+
+Replay 2097534457943396353已监听至终态,总计216326ms;Parsing与Booking实际Profile版本都变化,确认本次用了新版。
+Parsing最终回答含review_requests空数组但少最后结束括号;Booking在最后unclassified_texts字段名中截断。两类四处公开/保存回答均一致且平台报success,系统拒收,Layer6阻断,无新任务或工作台项。
+详情提前停刷同样复现,已手动刷新至最终结果。用户具体修改的配置项尚未说明,不能推断截断根因;仅监听和记录,无应用/Agent配置改动。详见[配置后测试证据](../50-evidence/topics/2026-09-09-live-replay-both-agents-incomplete.md#配置调整后的再次监听1200结束)。
+
+## 2026-09-09 新EML现场监听:双Agent缺尾,自动处理已失败结束
+
+用户在侧边5178自行上传执行Replay 2097530868537724929,本对话监听至11:46:24(+08:00)结束,共276925ms。
+Parsing在review_requests字段、Booking在unclassified_texts字段后缺尾,两类公开final/流片段/run快照/保存回答一致且平台报success;系统拒收,Layer6被阻断,本次无新增工作台项或任务卡。
+另实证详情在Parsing失败时提前把terminal设为true并停止刷新,后台Booking仍运行;结束后手动刷新才显示最终失败与完整耗时。
+本轮只监听、核对并刷新查看,没有重新执行/修改代码或配置。后续需核对系统API与平台手工运行的输出/结束差异,并修正提前停刷;日志充分性评估仍在独立对话。详见[现场测试证据](../50-evidence/topics/2026-09-09-live-replay-both-agents-incomplete.md)。
+
+## 2026-09-09 AgentBus日志充分性评估完成(后续仅批准准确性纠错)
+
+现有原始返回足以核对失败阶段和回答缺尾。用户随后明确日志由助手分析,基本够用;广泛增强建议不作为本期待办,仅批准三项已确认错误信息的纠正,见上方修复状态。
+不扩展原输入留存或新增状态标签/产物汇总;平台未公开的结束原因仍不能由日志推断。详见[评估证据](../50-evidence/topics/2026-09-09-agentbus-log-sufficiency-audit.md)。
+
+## 2026-09-09 最新LianTai测试:Parsing返回不完整,部分任务已生成
+
+Replay `2097512443832668161`的Parsing Agent最终回答停在review_requests字段冒号后,完整JSON无法解码,系统拒收并记录INVALID_PROVIDER_RESULT。
+公开final、run快照、该message流片段合并与保存回答均一致;平台同时报success,日志缺结束原因/输出额度信息,尚不能确定平台为何提前结束。
+后续Booking与Layer6成功,当前工作台已有2修改+1新建待确认卡、1条人工处理Risk通知。统一记录按中途系统错误显示异常,非员工待确认误判。
+用户已返回两份Parsing平台手工日志,均完整且通过现有严格解码、6条材料及引用核对;第二份已包含原6行指令,最终回答与第一份逐字相同。输入仍有同样空格差异,旧run结束原因和系统全链复验尚未闭合。日志改造评估转独立对话,本对话继续测试跟进。
+本轮仅只读排查,无新执行或代码/配置变更;继续5178本期测试与问题修正,通用发件人仍不在本期。详见[排查证据](../50-evidence/topics/2026-09-09-liantai-parsing-incomplete-final.md)。
+
+## 2026-09-08 本期范围已纠正:进入5178集中测试与修改阶段
+
+用户明确其他发件人的通用邮件处理本期不管。ADR-036、领域/架构、待办及上次核查中的范围残留已清理,
+不再把它列为本期开发缺口、测试完成条件或上线阻断,也未安排未来开发。
+当前本期主功能已实现:QBD/普通LianTai、OPFIT通知规则、三入口工作台、确认记录、统一处理记录与现有全流程详情。
+下一步在5178做真实业务验收,发现问题后修正;自动监听来源和有Name 1/无Tour Code的FIT建档仍需真实样本。
+正式数据库、账号权限、监控告警及部署验收在准备上线时处理,不阻断当前本地测试与修改。
+最近前端151项通过,后端既有报告995通过/5外部验收跳过;最新代码尚未提交/推送,本次仅改文档。
+详见[修正后的完成度核查](../50-evidence/topics/2026-09-08-project-completion-audit.md)。
+
+## 2026-09-08 OPFIT真实EML已通过手动上传通知验收
+
+用户提供的通知专用邮箱EML已在5178按选择、预览、二次确认流程单次执行,Replay `2097274461007613954`正常完成,耗时1.22秒。
+Layer3/4及Booking Agent跳过,Layer5生成1条其他通知,Layer6通过;零Agent调用、零关联预订任务,通知仍待员工确认但系统处理已经结束。
+统一记录来源为手动上传,收到时间为本次进入系统时间,异常筛选排除本条,耗时固定且终态停止自动刷新。
+
+实际验收同时修复待办页进入时使用旧缓存的问题:进入其他通知即读取最新队列,列表与侧栏均显示新通知。
+修复前复现的回归现已通过,7项相关测试、类型及生产构建通过;仅前端进入刷新改变,后端和Agent配置保持不变。
+本机现在4条回放,开放待办29(人工28、通知1);未重复执行、确认通知或生成预订记录。
+自动监听来源新样本仍待后续获准输入。详见[真实EML验收](../50-evidence/topics/2026-09-08-opfit-real-eml-acceptance.md)。代码未提交或推送。
+
+## 2026-09-08 AgentBus双来源处理记录与通知专用测试已加载5178
+
+AgentBus模块默认进入紧凑的“处理记录”,查询真实自动收件和已执行手动上传;仅显示系统接收时间、来源、发件人、耗时和详情。
+支持今天/近7天、发件人及只看异常,正常人工业务结果不计异常。两来源在当前模块共享原Trace、输入输出、错误、生命周期与日志导出,
+URL保存记录身份与筛选条件;返回保留条件并刷新。列表按页面事件刷新,只有仍在处理的详情每10秒读取并在终态/离开时停止。
+
+通知专用邮箱现可复用正式规则完成EML测试:Layer1/2保存材料,Layer3/4跳过,Layer5明确Booking Agent跳过且已生成一条其他通知,
+Layer6通过有效性校验;通知进入工作台即结束,不等待员工ACK,不生成预订任务或记录。其他发件人的通用处理已按用户最新要求撤出本期。
+历史自动收件未保存的入口阶段及Parsing原始请求会明确标为未留存,已保存输出与公开日志仍可查看,不补造历史证据。
+
+前端150项通过,后端完整package为995通过/5显式外部验收跳过、0失败/0错误;类型、构建、局部lint、Secret扫描与浏览器验收通过。
+当前5178运行Wyndham-RSVN-0908前端,8082使用该项目最终JAR,H2 V38/PG V18已加载。原本地数据库/存储/JDK17/受保护env位置保留,
+Agent/Profile/版本绑定与Secret未变;原启动项及本地数据库已备份。本机3条旧回放完整保留,异常筛选仅1条原失败;详情刷新、返回与日志正常。
+本轮未提交新的真实EML或调用Agent,自动来源与通知专用行为采用隔离验收;后续获准样本可直接从手动上传测试执行,不需再改绑定。
+详细证据见[本次验收](../50-evidence/topics/2026-09-08-agentbus-unified-records.md)。代码未提交或推送。
+
## 2026-09-08 5178已作为独立根历史发布到新仓库
唯一正式远端为 `https://git.nianxx.cn/shiyuyun/Wyndham-RSVN-0908`。在远端无branch/tag的前提下,
@@ -22,7 +105,7 @@ strict/PG/双Agent ready且缺失配置为空。页面有单个EML选择器,
10条确认记录,不应以全局总数判断新测试。当时同仓库仍保留5174 reference mode与不可达旧locale文案;这一源码级缺口
已由本文首段的独立根提取关闭,新仓库不再包含5174运行源码或假回放。
-邮箱自动监听与手工回放统一展示已写入Active commitment,当前未改实现。ADR-036全发件人处理仍是已确认、待实施的独立项目;
+邮箱自动监听与手工回放统一展示已写入Active commitment,当前未改实现。该历史时点曾记录ADR-036;用户现已明确撤出本期;
6张缺Name 1 FIT、真实有Name 1/无Tour Code FIT样本及production/MySQL/监控/SCA门禁保持不变。
## 2026-09-08 5178两封真实EML受控闭环与运行隔离已验收
@@ -37,24 +120,10 @@ LianTai单次回放完成。QBD形成7条已确认Group记录、6张缺Name 1的
完整lint仍有569条既有格式warning,5174参考build仍有大chunk warning。production回放默认关闭,正式部署、认证/权限、真实MySQL、
监控/审计/保留、多节点限流及CI Maven SCA仍是上线门禁;6张FIT需真实Name 1或员工人工核实。
-## 2026-09-08 全发件人邮件处理产品与路由架构已确认,代码待实施
+## 2026-09-08 通用发件人原方案已撤出本期
-用户已确认ADR-036:除`opfit.liantaitravel@gmail.com`继续无条件进入“其他通知”外,发件人不再作为邮件处理白名单。
-普通LianTai与QBD保持现有固定渠道流程;其他发件人也必须尝试理解邮件。能够形成具体预订任务时,按校验结果进入“待确认”
-或以任务身份进入“人工处理”;无法形成具体预订任务时统一进入“其他通知”,包括明确无预订动作、信息不足、附件不认识、
-结果不确定,以及Agent或系统失败后仍无具体任务的情况。
-
-人工处理任务与其他通知都只展示已提取要素,未提取字段留空,不需要向员工解释为什么没有自动生成任务。人工处理中的具体任务
-确认后建立或归入预订记录;其他通知确认只表示邮件已处理,不建立预订记录。任何已接收邮件都不得只停留在员工不可见的FAILED状态。
-
-用户进一步确认:通用处理使用独立前半段,不复用QBD/LianTai固定渠道规则;通知专用邮箱在附件内容处理和Agent前尽早分流;
-通用来源无法确认的字段留空;统一复用后半段业务判断、校验和员工工作台。按七层边界,通用路径使用独立Layer 2/3,Layer 4只
-复用中性订单结构,Layer 5–7复用现有主链。Layer 6保持一套,不另建通用校验层:公共入口删除QBD/LianTai全局前提,
-保留所有路径共有的处理结果有效性检查,并按固定渠道、通用邮件、通知专用邮箱分别启用适用规则;Layer 6只校验、不改型。
-
-本轮只记录产品与路由架构决定,没有修改代码、Agent、配置、数据库或运行服务。当前正式输入和Layer 4仍只支持QBD/LIANTAI,
-严格回放也会拒绝其他sender;下一步必须先形成通用邮件处理Change Request,明确通用正文/附件支持范围、输入契约、重试和失败
-终态,再实施并用七类邮件矩阵验收。另一对话正在进行的新旧代码剥离与SuperAgent修改保持不动。
+原全发件人产品与七层路由方案已被用户最新范围说明撤回,不再保留有效实施要求。
+[ADR-036](../10-decisions/adr-036-all-sender-booking-intake-and-notification-fallback.md)仅作为撤回标记,避免历史资料恢复本期需求。
## 2026-09-08 5178迁移与本地安全加固完成(独立仓库提取前)
@@ -2609,7 +2678,7 @@ Provider metadata、failure class及持久Candidate/validation摘要。正式页
聚合、套房继承、公司级缺价和 canonical DecisionInput SHADOW 链均已实现。后续产品修订已移除当前订单/历史任务查询,
并把普通 LianTai 改为同时输出 FIT/GROUP options。Layer 6现只做等值/必填/证据校验,Layer 5 Candidate已承载早餐字段;Parsing
Agent最终Layer3 handoff与当前附件文件名型Rooming resolver均已由后续任务完成。
-
+
## Recently Completed
- 2026-08-13:按用户授权扩展 BR00 本地开发旁路:仅在 `DEV + VITE_ENABLE_BR00_PROTOTYPE=true` 下,匿名访问正式 `/reservation/*`、`/debug/*`、`/system/*` 不再受前端路由守卫、401 登录跳转、菜单和按钮权限拦截,并提供只读开发身份/酒店/导航上下文;不伪造 token、不绕过后端鉴权,生产构建不启用。默认与带开关两组前端均为 38 files/321 tests,typecheck、lint、production build 通过;浏览器确认正式订单及任务详情停留原路由,当前数据 404 是 5174 未连接后端 API。
@@ -2682,7 +2751,7 @@ Agent最终Layer3 handoff与当前附件文件名型Rooming resolver均已由后
Parser failure 三组零网络本地 fixture。Recovery 始终显示策略跳过,Rate/Room 未接线明确不可用;前后端全量
自动化(后端 625 tests,0 failures/errors、3 skipped;前端 300 tests)、生产构建和
375/768/1024/1440 浏览器验收通过。
-
+
- 2026-08-17:修复本地 AgentBus EML 回放启动链:专用脚本显式启动 `local,local-replay`、配置 Vite API proxy、
复用既有 dev-only 身份/酒店上下文并移除 Spring Boot 3.5 不接受的 profile include。隔离环境 8082/5178 已完成
合成 EML 选择与 preview,生成 replay `2089174776450777089`;停在确认前,未执行下游。前端 45 files/347 tests
@@ -2745,7 +2814,7 @@ Replay `2090071005565255681` 已完成当前业务主链:Booking run=`AWAITING
Group=`LIAN TAI / Group`,且没有新增 LianTai-FIT 渠道路由。
- 旧Recovery `IN_PROGRESS` invocation仍没有fencing自动接管;Booking V2 execution已具备lease/fencing takeover,
新attempt开始会安全关闭同execution较低attempt的stale `IN_PROGRESS` audit。两条runtime不得混用。
-
+
## Next Recommended Steps
1. 在指定非生产部署通过Secret管理注入两个独立key,先保持全部worker关闭完成PG V1–V12、MySQL V1–V34和
@@ -2764,7 +2833,7 @@ Replay `2090071005565255681` 已完成当前业务主链:Booking run=`AWAITING
Layer3 required-fact目录。CP6须在观察期与回滚演练后另行授权。
7. 在配置 Booking PostgreSQL 的 dev/test 环境执行 V4 migration 与真实 AgentBus replay trace smoke,核对
artifact linkage、Agent audit、7 天清理和大 payload 懒加载;不得借此启用 PMS/Opera。
-
+
## Open Questions / Blockers
- Parser v1、Parsing Agent v1.0契约、CP4内部接线、历史CP5测试平台绑定和V2→V4本地实现均已完成;历史PG
@@ -2783,7 +2852,7 @@ Replay `2090071005565255681` 已完成当前业务主链:Booking run=`AWAITING
覆盖旧Recovery V3或Booking V11业务级端到端,也不授权复用连接或启动对应Provider。
- 唯一共用 Discussion Draft 已作为 QBD Implementation Baseline 收口,SHA-256 `faedb8b78ac7f752dc4ccaaf49abf542a75818e87d9494748e58b5dff48e4c56`;若文件变化需双方重新核对 hash。
- 冻结源 Excel `REVISE- RATE CODE_8.7 更新 .xlsx` 当前不在本机可检索路径;不影响本次 policy-only 校验,但恢复后必须重跑 source generator `--check` 才能形成完整来源复现证据。
-
+
## Risky Areas
- ADR-008 Parser 公共边界已经独立迁移;剩余风险集中在 assembler/Layer3 v2/Recovery/merge。删除 `parseLegacy`
@@ -2798,7 +2867,7 @@ Replay `2090071005565255681` 已完成当前业务主链:Booking run=`AWAITING
- AgentBus EML 回放依赖公开可读取 OSS、`agentbus.capture.enabled=true` 及一个可用下游分支;只有 `local`/`dev`/`test` profile 显式开启开关时可见,生产强制不注册入口。
- Trace detail 可在 `SYSTEM_DEBUG_EML_RUN` 下读取邮件正文、附件地址和合规 Provider 最终回答;必须保持酒店/
SourceMessage/run 关联校验、7 天保留期与 Secret/二进制/隐藏推理永久拒绝规则。
-
+
## Last Updated
2026-08-21
diff --git a/.project-docs/30-worklog/task-history.md b/.project-docs/30-worklog/task-history.md
index df1818f..ebcd01a 100644
--- a/.project-docs/30-worklog/task-history.md
+++ b/.project-docs/30-worklog/task-history.md
@@ -4,11 +4,24 @@
| Date | Task | Outcome | Docs Updated |
|---|---|---|---|
+| 2026-09-09 | 修复AgentBus日志三项不准确信息 | 1009通过/5原有外部验收跳过;纠正保存、未知用量、完成耗时及中途失败提前停刷;用户批准后空闲重载8082,7条历史原文不变/显示纠正/时间稳定,5178可继续测试 | CR、日志/接口/安全契约、current-state、history、evidence/index/topic、原评估结论、scoped planning |
+| 2026-09-09 | 对照用户提供的SuperAgent服务器日志 | 四run精准关联,三个续传ID确实曾由平台发出但已无法在缓冲找到;最新Parsing无重连仍缺尾,不能把续传警告当全部根因。缺模型原文/停止原因/上限,明确优先核查样本;仅附件和既有证据核对 | current-state、task-history、既有接收排查evidence topic/index |
+| 2026-09-09 | 排查Agent回答是否被本系统接收截断 | 独立GET四份失败原回答均已缺尾且与系统逐字相等;HTTP完整、成功对照正常;接收恢复日志28项与部署Parser离线23项通过。旧run事件流查询超时,平台内部原因仍待查;未改应用/配置或重跑 | current-state、task-history、evidence/index/topic、scoped planning |
+| 2026-09-09 | 监听用户调整配置后的新EML运行 | 双Agent新版均实际采用但仍缺尾,3分36秒失败,无新产物;Parsing少结束括号、Booking末字段名未闭合。提前停刷复现并手动刷新到终态;未改代码或配置 | current-state、task-history、既有现场测试evidence topic |
+| 2026-09-09 | 监听用户在5178新上传EML至终态 | 新Replay双Agent均返回最后字段缺尾,4分37秒失败结束,无新任务;同时实证详情因Parsing异常提前停止刷新,手动刷新后显示最终结果。仅监听/离线核对,无重放或代码配置改动 | current-state、task-history、evidence/index/topic |
+| 2026-09-09 | 核对第二份Parsing手工测试日志(16) | 原6行指令已带入,最终回答与前一份成功日志逐字相同;现有Decoder及6条材料/引用核对通过。未复现缺尾,不声称旧run已修复;仅测试跟进,日志改造评估继续在独立对话 | current-state、task-history、既有失败测试evidence topic |
+| 2026-09-09 | 评估AgentBus EML全流程日志信息是否充分 | 原始返回能力有效;建议补完整输入取用、具体失败、留存/排队口径、终态耗时和实际产物,平台结束原因视实际提供情况。仅评估未改代码,建议未转为已批准需求 | current-state、task-history、evidence/index/topic |
+| 2026-09-09 | 对照用户返回的Parsing Agent平台手工运行日志 | 最终JSON完整且现有严格Decoder离线通过;6条材料展示/引用闭合,未复现旧缺尾。导出缺6行前置指令、有18处空白差异;旧run提前结束原因仍未知,不改代码/配置或回填旧记录 | current-state、task-history、evidence topic、commitments |
+| 2026-09-09 | 排查最新LianTai日志失败原因 | 确认Parsing最终JSON在review_requests字段处提前结束,四处平台/本地回答一致,触发INVALID_PROVIDER_RESULT;后续Booking/校验成功,3待确认卡及1人工处理通知。平台success未提供提前结束原因;仅只读,无重放/配置/业务变更 | current-state、task-history、evidence/index/topic、scoped planning |
+| 2026-09-08 | 按用户明确范围撤下通用发件人本期需求并确认测试阶段 | 清理ADR/index、领域/数据流、承诺/维护清单和完成度核查中的待实施要求;本期现有功能进入5178测试与修改,上线准备在决定上线时处理。仅文档变化 | positioning、ADR/index、business-rules、architecture、current-state、history、evidence/index/topic、commitments、stale-items、PROJECT_STATE、项目README、scoped planning |
+| 2026-09-08 | 核查整个5178项目是否仅剩测试 | 核查主流程代码、真实验收和运行状态,前端151通过。原将ADR036列为本期未开发的结论已按用户随后明确的范围纠正:通用处理本期不做,现有功能进入5178测试修改;上线准备另阶段处理 | current-state、task-history、evidence/index/topic、stale-items、scoped planning |
+| 2026-09-08 | 用OPFIT真实EML完成通知专用单次验收并修正待办进入刷新 | 实际5178上传执行1次,1.22秒完成,L3/L4及Booking Agent跳过、L5生成1条GENERAL通知,零Agent调用/关联预订任务;终态无异常,通知正文和附件可见。修复进入待办页沿用旧缓存,新增回归先红后绿,7项/类型/构建通过;保留未确认通知,无重复执行或配置变更 | current-state、task-history、evidence/index/topic、commitments、PROJECT_STATE、scoped planning |
+| 2026-09-08 | 改造AgentBus双来源处理记录并支持通知专用EML测试 | 已批准CR落地:统一只读列表、系统接收时间与异常口径、原Trace/日志复用、URL及返回条件、事件刷新与10秒活动详情;opfit复用正式通知规则,跳过L3/L4及Booking Agent,投影后正常结束。前端150、后端995通过/5外部验收跳过、构建及浏览器通过;修正双库接线并将7份合成旧测试资料迁入classpath。新版5178/8082已加载、H2 V38/PG V18、配置及既有3条历史保留;未新执行真实邮件、未提交推送 | CR、ADR032/index、architecture、安全/前后端契约、M012、current-state、task-history、evidence/index/topic、commitments、reflection、scoped planning |
| 2026-09-08 | 将5178提取为独立Git项目并首次推送新仓库 | 从最终5178源码树建立无父root commit `31849411…`并推送到新仓库`main`,不继承旧约200条历史/branch/tag;物理排除5174运行源码、假回放、真实邮件、本地数据库/日志、依赖/构建与生成产物,保留三入口、真实AgentBus及显式DEV fixture。TypeScript、435-module production build、双次Secret扫描和远端回读通过;AgentBus配置与业务数据未动,旧工作目录origin已移除 | ADR-034、module-map、current-state、task-history、evidence/index/topic、memory-index |
| 2026-09-08 | 停用旧Git仓库并切换到全新5178远端 | 用户明确旧`huangting/th-hotel-simple`仓库不得再用;只读确认新`shiyuyun/Wyndham-RSVN-0908`仓库可访问且无branch/tag后,将本地origin的fetch/push地址切到新仓库。尚未推送代码或标签,旧仓库未产生任何写入 | project-positioning、current-state、task-history |
| 2026-09-08 | 复核5178剥离收尾并确认EML模拟就绪 | 重新核对三入口、旧路由/代码退役、production包和版本标签;前端205项、后端全量与7项本机端口测试对账、双build、ESLint error gate、pnpm production审计、JDK17/capabilities及浏览器逐页验收通过。当前可上传新EML;记录自动监听与手工回放统一展示待办,并明确同仓库5174参考源码/旧locale/forRemoval类仍属源码级终态待讨论。未上传EML、调用Agent或写业务数据,仅删除本轮可重建参考build目录 | current-state、task-history、evidence/index/topic、stale-items、commitments、scoped planning |
| 2026-09-08 | 用两封真实EML完成5178受控回放、员工确认与记录闭环,并修正运行mode漂移 | 保持AgentBus配置不变,串行完成QBD原失败+唯一恢复和LianTai单次回放;QBD安全确认7张Group卡、保留6张缺Name 1 FIT人工处理、ACK 1条通知,LianTai确认3张Group卡、ACK 1条通知,共10条唯一记录。项目本地切JDK17,固定sender映射覆盖两个活动catalog版本;修正5178 LaunchAgent为workbench5178 mode并保留回滚副本。前端205、后端935、两套build、应用postflight和浏览器三入口验收通过;无PMS/Opera写入,production继续HOLD | ADR-034/035/index、business-rules、current-state、task-history、evidence/index/topic、hardening addendum、stale-items、commitments、scoped planning |
-| 2026-09-08 | 确认并记录全发件人邮件处理规则与七层路由架构 | 发件人由处理资格白名单改为处理方式路由:LianTai FIT专用邮箱在附件内容处理和Agent前直达其他通知,普通LianTai与QBD不变,其他发件人必须尝试处理;通用路径使用独立Layer2/3,Layer4只复用中性结构,Layer5–7复用现有业务判断、校验与工作台。已形成具体任务的按校验进入待确认或人工处理;无法形成具体任务的统一进其他通知,包括无预订动作、信息不足、附件不认识、不确定及Agent/系统失败。未提取字段留空,不展示未自动建任务原因。本轮只记录决定和方案,代码仍待CR,未碰并行的新旧剥离/SuperAgent修改 | ADR-036/index、ADR-032、business-rules、data-flow、current-state、task-history、stale-items、commitments、scoped planning |
+| 2026-09-08 | 历史:讨论全发件人邮件处理规则与七层路由架构(已撤出本期) | 原仅记录产品/路由方案,未实施;用户随后明确本期不管通用处理,相关有效需求及待办已撤下。此行只保留历史事件,不构成当前或后续开发承诺 | ADR-036撤回标记、current-state、task-history、范围纠正证据 |
| 2026-09-08 | 复用现有AgentBus配置并加载5178终态运行基线 | 保持AgentBus端Agent/Profile/版本绑定和`.env.local-replay`不变;启动前只读确认获准PG四类活动队列均为0,随后用当前代码恢复8082并由5178代理验收:健康UP、H2 V37、PG V16、strict ready、missing=[]、双Agent/PG ready、Layer7非保留、历史0条。修正本地回放身份残留的旧菜单路径为正式`/agentbus/eml-replay`并补回归;后端全量933项通过。未上传EML、调用Agent或产生业务写入 | current-state、task-history、architecture、evidence/index/topic、stale-items、commitments、scoped planning |
| 2026-09-08 | 完成5178迁移后安全加固并恢复整仓发布基线 | 关闭匿名旧写、邮件HTML XSS、来源材料跨酒店读取和fixture生产泄漏;删除旧邮件导入/Debug EML运行面,AgentBus改为任意环境显式开关且production默认关闭;补详情竞态、队列容错/分页/刷新、权限导航、酒店切换/退出、登录限流和确认并发保护,升级nanoid。前端205/205、后端干净全量932/932、V1–V37、两套build/Skill、依赖审计和5178只读浏览器验收通过。未执行真实EML/Agent/PMS/Opera,外部部署门禁继续有效 | ADR-034/index、system-overview、module-map、data-flow、business-rules、current-state、task-history、evidence/index/topics、stale-items、commitments、scoped planning |
| 2026-09-08 | 完成5178迁移后全项目自检 | 只读审计确认三入口前端与聚焦迁移路径可用,但当前不可上线/注入真实数据:发现旧任务6个匿名跨酒店写入口、邮件HTML存储型XSS、来源材料跨酒店IDOR三个联网前阻塞;生产包仍含fixture,5174/5178运行模式未隔离,后端全量仍有14个真实红灯,另记录FIT同名身份、并发、权限、分页、依赖和文档契约风险。未修应用代码、未重启、未执行EML/业务写入、未提交Git | current-state、task-history、evidence/index/topic、stale-items、scoped planning |
diff --git a/.project-docs/40-domain/business-rules.md b/.project-docs/40-domain/business-rules.md
index bf83b95..cb9b250 100644
--- a/.project-docs/40-domain/business-rules.md
+++ b/.project-docs/40-domain/business-rules.md
@@ -151,21 +151,12 @@
- 所有任务写操作以认证用户为actor并校验动作权限与资源酒店;来源邮件正文/附件只允许认证酒店读取。
浏览器邮件会话使用纯文本正文,不渲染或接收外部邮件原始HTML。
-## 全发件人邮件处理分流(ADR-036,产品与路由架构已确认、待实现)
+## 本期邮件处理范围(2026-09-08纠正)
-- 发件人不再决定邮件是否有资格处理。所有合法入站邮件都保存来源,并最终形成员工可见的预订任务或通知;
- sender registry只负责选择更准确的处理方式。
-- `opfit.liantaitravel@gmail.com`继续作为唯一已确认的通知专用邮箱:精确命中后直接进入“其他通知”,
- 不解析表格、不调用两个Agent、不生成预订任务或预订记录。
-- 普通LianTai和QBD继续按现有固定渠道规则处理,不修改其Parser、Agent、房型、Rate或早餐规则。
-- 其他发件人进入通用邮件处理,不得伪装成QBD/LianTai或套用其渠道专用业务资料:
- - 已形成具体预订任务时,按校验结果进入“待确认”或以任务身份进入“人工处理”;
- - 无法形成具体预订任务时,统一进入“其他通知”,包括明确无预订动作、信息不足、附件不认识、结果不确定,
- 以及Agent或系统失败后仍无具体任务。
-- “人工处理”任务和“其他通知”只展示已经提取到的要素,未提取字段保持空白;无需向员工解释没有自动生成任务的内部原因。
- 内部原因仍须保留给审计、监控和问题排查,但不是员工办理文案。
-- 人工处理中的具体预订任务确认后建立或归入预订记录;其他通知确认只出队,不创建或更新预订记录。
-- 业务无法识别、Agent失败或系统处理失败都不得让邮件只停留在后台FAILED状态;已接收邮件必须回退为员工可见通知。
+- 普通LianTai和QBD按现有固定渠道规则处理。
+- `opfit.liantaitravel@gmail.com`按ADR-032作为通知专用邮箱:保留来源邮件与附件身份,直接生成其他通知,不调用Parser/Agent或生成预订任务。
+- 其他发件人的通用邮件处理已撤出本期;不作为待实施规则、测试完成条件或上线阻断。
+- 现有任务确认后建立或归入预订记录;其他通知确认只表示已处理,不建立预订记录。
## 多段住期订单(ADR-024,实施中)
@@ -183,13 +174,10 @@
## Layer 5 Booking Business Agent v1.0(ADR-012,由ADR-024修订多住期规则)
-- 除ADR-032通知专用邮箱外,所有入站邮件都必须先进入适用的邮件处理路径;QBD/LianTai继续经过
- Booking Business Agent,其他发件人使用独立通用材料/解析能力并从中性上下文、Booking判断、校验和工作台复用后半段;
- 具体输入与附件契约由ADR-036后续Change Request确定。本地代码不得提前猜测
- New/Update/Cancel,也不得在Agent失败后恢复旧业务结果;无法形成具体任务时必须回退为员工可见的其他通知。
-- QBD/LianTai继续执行现有两道门槛:第一门槛无法安全识别时形成局部Risk;第二门槛发现已识别任务的字段
- 缺失或非法时保留原类型,由Layer 6交员工复核。通用路径第一门槛无法形成具体任务时不生成Risk,统一形成
- `GENERAL`其他通知;已经形成具体任务但需要复核时,才以任务身份进入人工处理。
+- 本期QBD与普通LianTai预订处理经过Booking Business Agent;ADR-032通知专用邮箱按确定性规则生成其他通知。
+ 本地代码不得提前猜测New/Update/Cancel,也不得在Agent失败后恢复旧业务结果。
+- 固定渠道继续执行现有两道门槛:第一门槛无法安全识别时形成局部Risk;第二门槛发现已识别任务的字段
+ 缺失或非法时保留原类型,由Layer 6交员工复核。其他发件人的通用处理规则不在本期适用范围。
- Layer 3 的 `SOURCE_ACTION_KIND` 只表示来源写了什么;Layer 4 交付 canonical Room Type、FIT/GROUP
Rate/早餐 options与Rooming List typed resolution。Layer 5不读原始Excel、不做目录映射、不判数据库历史。
- 同一非空 Group Code 的来源单元聚合为一个订单目标,各物理来源和住期段 evidence 仍分别保留;普通 New/Update
diff --git a/.project-docs/50-evidence/evidence-index.md b/.project-docs/50-evidence/evidence-index.md
index fb17ac3..343f0eb 100644
--- a/.project-docs/50-evidence/evidence-index.md
+++ b/.project-docs/50-evidence/evidence-index.md
@@ -4,6 +4,15 @@ Use this index for searchable, traceable evidence records.
| Date | Topic | Status | Source | Detail |
|---|---|---|---|---|
+| 2026-09-09 | AgentBus日志准确性修复 | Implemented, packaged and runtime-loaded with user-approved idle cutover; read-only verification passed | 保存/用量/终态回归、1009通过/5跳过、7条原文hash不变/时间稳定、8082/5178就绪、零活动队列 | [Topic](topics/2026-09-09-agentbus-log-accuracy-fix.md) |
+| 2026-09-09 | Agent回答缺尾接收侧排查 | Independent snapshots confirm incomplete provider answers; internal provider cause unresolved | 五份独立GET、四失败原文相等、一成功对照、28+23检查通过;平台附件确认三次续传警告,最新Parsing无重连仍缺尾 | [Topic](topics/2026-09-09-agent-response-reception-audit.md) |
+| 2026-09-09 | 5178新EML双Agent缺尾与提前停刷 | Reproduced live; provider root cause unresolved | Replay2097530868537724929、双Agent四处原文一致、无新产物、后台未结束但terminal/停刷实证 | [Topic](topics/2026-09-09-live-replay-both-agents-incomplete.md) |
+| 2026-09-09 | AgentBus日志信息充分性评估 | Audit complete; only accuracy corrections approved | 用户确认现有内容给助手分析基本够用;广泛增强不作为待办,仅三项已确认错误实施 | [Topic](topics/2026-09-09-agentbus-log-sufficiency-audit.md) |
+| 2026-09-09 | LianTai Parsing最终返回不完整 | Failure cause confirmed; provider early-stop reason unknown | 3890字符不完整JSON、四份回答/hash一致、INVALID_PROVIDER_RESULT、3任务+1人工处理通知 | [Topic](topics/2026-09-09-liantai-parsing-incomplete-final.md) |
+| 2026-09-08 | 本期范围撤回与5178测试阶段确认 | Updated per explicit user instruction | 通用发件人有效需求撤下、核查结论纠正、部署事项不阻断本地测试、文档一致性和应用无变化检查 | [Topic](topics/2026-09-08-current-release-scope-correction.md) |
+| 2026-09-08 | 5178整个项目完成度核查 | Scope corrected; current release ready for local business acceptance | 核心代码/ADR036/真实EML证据、前端151、既有后端995+5跳过、运行UP/4手动0活动、部署与样本边界 | [Topic](topics/2026-09-08-project-completion-audit.md) |
+| 2026-09-08 | OPFIT真实EML单次通知验收与待办进入刷新 | Passed; one real manual run, notification unacknowledged | 1.22秒完成、L3/L4/Booking Agent跳过、单GENERAL通知、零Agent/预订任务、真实界面及7项回归/构建 | [Topic](topics/2026-09-08-opfit-real-eml-acceptance.md) |
+| 2026-09-08 | AgentBus双来源处理记录与通知专用EML测试 | Implemented; local runtime and read-only browser verified; new real EML not executed | 150前端、995后端通过/5显式验收跳过、双库接线修复、H2 V38/PG V18、三条历史/筛选/URL/日志、通知零Agent隔离验证 | [Topic](topics/2026-09-08-agentbus-unified-records.md) |
| 2026-09-08 | 5178独立仓库提取与首次发布 | Completed; clean root history published to new main | 5174运行源码/假回放/本地数据排除、435-module production build、双次Secret扫描、root commit与远端回读 | [Topic](topics/2026-09-08-5178-clean-repository-publication.md) |
| 2026-09-08 | 5178剥离收尾与EML测试就绪性 | Local runtime/build separation passed; EML simulation ready; source archival and production deployment remain follow-ups | 三入口/旧路由、frontend205、backend935沙箱对账、双build、production扫描、JDK17/capabilities、浏览器上传控件与真实数据计数 | [Topic](topics/2026-09-08-5178-separation-closure-and-eml-readiness.md) |
| 2026-09-08 | 5178两封真实EML受控闭环验收 | Local authorized real-EML acceptance passed with six expected FIT manual-review items; production HOLD | QBD原失败+唯一恢复、LianTai单次回放、双Agent/Layer6、7+3确认记录、6张FIT人工处理、应用级postflight、JDK17、5178 mode修正、完整回归与浏览器验收 | [Topic](topics/2026-09-08-5178-real-eml-controlled-acceptance.md) |
diff --git a/.project-docs/50-evidence/topics/2026-09-08-5178-separation-closure-and-eml-readiness.md b/.project-docs/50-evidence/topics/2026-09-08-5178-separation-closure-and-eml-readiness.md
index 64ce27d..60dd544 100644
--- a/.project-docs/50-evidence/topics/2026-09-08-5178-separation-closure-and-eml-readiness.md
+++ b/.project-docs/50-evidence/topics/2026-09-08-5178-separation-closure-and-eml-readiness.md
@@ -51,7 +51,7 @@ AgentBus EML全流程回放三个根入口;旧邮件导入、旧Debug EML、
1. 已按用户要求记录:将邮箱自动监听与手工回放统一成可查询的邮件处理记录。当前自动监听有SourceMessage/处理链留痕,但不会自动进入现有回放历史。
2. 确认源码级剥离终态:继续保留同仓库5174 reference mode,还是只保留`baseline/5174-final-20260907`标签/分支并从活跃5178分支删除参考页面、旧locale和不可达迁移类。
-3. ADR-036“所有发件人都尝试处理”的产品与路由架构已确认但代码尚未实施;当前新的非QBD/LianTai sender严格回放仍会被拒绝。
+3. 历史曾记录ADR-036通用发件人方案;用户已明确撤出本期,此项不再是待开发、待验收或上线阻断。当前非固定渠道支持边界保持不变。
### Business / Data
diff --git a/.project-docs/50-evidence/topics/2026-09-08-agentbus-unified-records.md b/.project-docs/50-evidence/topics/2026-09-08-agentbus-unified-records.md
new file mode 100644
index 0000000..bb1eccd
--- /dev/null
+++ b/.project-docs/50-evidence/topics/2026-09-08-agentbus-unified-records.md
@@ -0,0 +1,52 @@
+# Evidence Topic: AgentBus双来源处理记录与通知专用EML测试
+
+## Metadata
+
+- Date: 2026-09-08
+- Status: Implemented; local regression, runtime and read-only browser verification passed
+- Scope: 5178统一只读记录、现有全流程详情复用、通知专用回放、刷新规则
+- Confidence: Fact
+- Source: 已批准CR、源码、隔离测试、构建与本机运行检查
+- Last verified: 2026-09-08
+- Stale trigger: 来源关系、详情保留期、处理终态、通知专用规则或运行配置改变
+
+## Approved behavior
+
+- 用户批准[CR](../../../docs/project/requirements/CR-20260908-agentbus-unified-records.md)后开始实施,沟通采用产品语言。
+- 默认处理记录只展示系统接收时间、来源、发件人、耗时、查看详情;日期限今天/近7天,发件人搜索及只看异常。
+- 自动AgentBus与已执行上传通过SourceMessage、Replay、Processing Run只读聚合,预览不入列表,上传不重复显示为真实收件。
+- 记录身份和筛选在URL中保存;两来源共享既有Trace、输入输出、错误、生命周期与复制/导出。返回刷新并保留条件。
+- 列表无周期轮询,只按进入、页签返回、焦点/可见恢复、手动刷新、详情返回及查询条件变化读取。
+- 活动详情10秒读取;明确终态、离开、卸载、酒店切换时停止,并隔离旧请求的晚响应。
+- 通知专用邮箱沿用正式业务分支:保存来源材料,L3/L4跳过,L5确定性生成其他通知并明确Booking Agent未执行,L6校验;投影成功即结束,不等待员工ACK。
+
+## Evidence and corrections
+
+- 后端统一查询先按日期范围200条批取轻量元信息,再筛选及分页;避免逐条Trace读取。真实收件使用Inbox.created_at,不使用邮件头时间。
+- 列表与Trace共用终态定义;正常人工处理不算异常,明确Provider超时/系统失败后转人工仍计异常;后续执行已恢复成功不永久继承旧尝试失败。
+- 通知标记持久化为NOTIFICATION_ONLY_SENDER_POLICY,V18只扩展现有白名单,不修改历史迁移;V38只添加系统接收时间索引。
+- Source详情适配在内存中复用现有聚合器,Replay id为空,不创建伪Replay或新业务流程。
+- 历史自动收件没有保存某些入口阶段与Parsing compact原始请求,按实际显示未留存;已保存Parser/Parsing输出和公共Provider journal继续可读,不能重建并伪称当次输入。
+- 完整后端初轮999项、0断言失败、24资源错误、5跳过;24错误均是独立仓库拆分后旧P0测试依赖已移走的导入目录。仅7份核实为合成数据的验收JSON迁至测试classpath,26项原测试全部通过,断言未删减。
+- 首次本机加载暴露双数据库自动装配问题:未限定的JdbcTemplate指向Booking库,平台记录查询503。已明确绑定平台dataSource并创建仓储私有JdbcTemplate,双库Spring接线测试通过;未增加全局Bean或改变其他模块,重新加载后列表正常。
+
+## Runtime boundary
+
+- 实施前已有3条手动回放(2完成/1失败),Parsing、Booking、工作台投影活动队列均为0。
+- 只使用当前已授权本机专属PG及原H2/文件存储;启动项、PG与停机后的H2均有受保护本地备份。
+- 后端新构建物来自正式Wyndham-RSVN-0908目录;保留旧目录作为现有本地数据与受保护环境文件位置,不从旧源码重新构建。
+- 未修改Agent/Profile/版本绑定/Secret,环境文件SHA256校验不变;未上传或执行真实EML、调用Agent、确认任务或ACK通知。
+- 本轮合成与只读验收不替代新的获准通知邮箱EML端到端执行。
+
+## Final verification
+
+- 前端25文件/150项全部通过;vue-tsc、production build、修改范围eslint通过且0警告。
+- 后端完整package退出0:1000项中995通过、5跳过,0失败/0错误。跳过项为需显式PG smoke、真实Agent smoke或用户提供生命周期日志的既有验收,不隐式开启外部调用。
+- Secret扫描、git diff --check通过;合成测试样例与本地node_modules链接边界已核对。
+- 最终8082构建时间2026-09-08T09:51:40Z,健康UP;H2 V38、Booking PG V18均成功。5178运行新目录,工作台仍为三入口。
+- 通知与普通回放就绪字段均true,缺失配置为空;受保护环境SHA256未变。启动项、原PG和停机H2均有本地受保护备份。
+- 默认列表3条,按接收时间倒序;两条正常人工业务终态不异常,原失败1条异常。近7天实际来源为3手动/0自动,没有制造真实收件或通知样本。
+- 三条既有记录的Trace均terminal=true、refresh_after_ms=null,14阶段与完整生命周期日志可读;未把员工待确认当作系统仍处理中。
+- 真实浏览器核对默认今天五列、近7天+qbd+只看异常仅1条、模块内详情、刷新同record_id、返回完整保留条件、上传原流程、切回刷新以及恢复默认列表。页面控制台无warn/error。
+- 浏览器工具的空字符串fill未实际清空搜索框,改用控件全选/删除后搜索成功;应用没有因此修改。
+- 本轮未创建Git提交或推送,不把本机验收当作生产发布或新真实EML闭环。
diff --git a/.project-docs/50-evidence/topics/2026-09-08-current-release-scope-correction.md b/.project-docs/50-evidence/topics/2026-09-08-current-release-scope-correction.md
new file mode 100644
index 0000000..fbc7581
--- /dev/null
+++ b/.project-docs/50-evidence/topics/2026-09-08-current-release-scope-correction.md
@@ -0,0 +1,31 @@
+# Evidence Topic: 本期范围撤回与5178测试阶段确认
+
+- Date / Last verified: 2026-09-08
+- Status: Updated per explicit user instruction
+- Confidence: Fact
+- Source: 用户明确“其他发件人的通用邮件处理本期不管”,要求更新残留产品记录,并询问能否先在5178测试修改。
+- Scope: 文档与产品范围;不改邮件处理实现、Agent、配置或业务数据。
+
+## Findings and correction
+
+检查发现ADR036仍为Accepted/Implementation Pending,领域规则、数据流、承诺、当前状态及前一轮核查均残留待实施口径。
+现已从本期有效需求、开发待办、验收条件和上线阻断撤下;ADR文件仅保留简短撤回标记,旧链接不能恢复需求。
+ADR011/012的通用路径修订说明同步撤销,固定渠道与ADR032通知专用例外保持当前实际规则。
+历史任务保留事件但明确该范围已撤回;上次“整个项目还有一项本期需求未开发”的结论已纠正。
+没有把本期排除变成“下期必须做”的隐含承诺。
+
+## Current stage
+
+本期主功能已实现,当前在5178做真实业务测试、反馈与问题修正;自动监听来源、有姓名无Tour Code的FIT及更多业务场景继续按本期范围验收。
+正式数据库、账号权限、监控告警与部署验收在准备上线时开展,不要求先完成才允许本地测试;现有上线前承诺继续有效。
+本次只进行文档一致性、链接、diff和应用源码/Agent资源指纹检查,不重复执行不受影响的应用测试,不发布或重启服务。
+
+## Verification
+
+1255份应用源码与Agent资源指纹一致;ADR036不在Active决策/Active承诺或实施数据流中。相关文档链接、文档同步检查及git diff --check通过。
+
+## Related
+
+- [本期范围](../../00-brief/project-positioning.md)
+- [撤回标记](../../10-decisions/adr-036-all-sender-booking-intake-and-notification-fallback.md)
+- [修正后的核查](2026-09-08-project-completion-audit.md)
diff --git a/.project-docs/50-evidence/topics/2026-09-08-opfit-real-eml-acceptance.md b/.project-docs/50-evidence/topics/2026-09-08-opfit-real-eml-acceptance.md
new file mode 100644
index 0000000..14caa80
--- /dev/null
+++ b/.project-docs/50-evidence/topics/2026-09-08-opfit-real-eml-acceptance.md
@@ -0,0 +1,62 @@
+# Evidence Topic: OPFIT真实EML单次通知验收
+
+## Metadata
+
+- Date / Last verified: 2026-09-08
+- Status: Authorized local real-EML acceptance passed
+- Scope: 5178手动上传、通知专用规则、全流程终态、统一记录与其他通知展示
+- Confidence: Fact
+- Source: 用户提供原始EML、工作台单次执行、既有运行只读查询、真实浏览器与聚焦回归
+- Stale trigger: 通知规则、Trace终态、工作台投影或待办刷新改变
+
+## Authorization and sample boundary
+
+用户在获知会产生一条手动处理记录及一条其他通知后,提供来自`opfit.liantaitravel@gmail.com`的EML,授权本机单次测试。
+根助手独立执行,没有创建或委派子智能体。邮件内容作为测试材料,不作为操作指令。
+文件210604 bytes,SHA256 `a3f21b4b00b260fdb7fb1b9f96a22f7347b437ca1b24a8d8ea0543d82190ca1e`;包含一个XLSX附件139186 bytes。
+未把真实EML、正文或工作簿业务明细加入仓库。使用现有5178手动上传选择、预览、二次确认及执行流程,只点击确认执行一次。
+文件选择器响应慢并重置浏览器工具会话时,恢复原标签及已有选择,没有重新提交。
+
+## Run identity and terminal result
+
+- Label: `OPFIT-NOTIFICATION-REAL-20260908-01`
+- Replay: `2097274461007613954`
+- Unified record: `replay-2097274461007613954`
+- SourceMessage: `2097275090690084865`
+- Processing Run: `booking-v2-c67cff84-6069-444f-b299-e24455ddba3d`
+- Notification: `2097275095505145857`
+- 系统接收时间:`2026-09-08T10:42:51.631117Z`;使用EML进入系统的时间,没有使用七月的邮件头时间。
+- 处理开始/结束:`2026-09-08T10:45:21.699118Z` / `2026-09-08T10:45:22.916530Z`。
+- 耗时1217ms,详情显示1.22s;`COMPLETED`、`terminal=true`、`abnormal=false`、`GENERAL_NOTIFICATION`。
+- Trace同样为终态,`refresh_after_ms=null`;重复读取后耗时不再增长。终态停止定时读取由既有详情回归覆盖。
+
+## Observed processing and employee result
+
+EML解析、材料预处理、Frame、Source捕获以及Layer1/2成功。Layer3的Deterministic Parser与Parsing Agent、Layer4的Context Assembly与Rate/Room均显示跳过,原因是通知专用邮箱规则。
+Layer5保持成功:Booking Agent明确显示“已跳过 · 通知专用邮箱无需判断”,通知结果生成显示“已完成 · 已生成1条‘其他通知’”。
+Layer6通过;工作台投影成功,人工确认阶段跳过,整次系统处理不等待员工确认通知。
+
+按该Processing Run在本机Booking PG只读核对:Parsing execution、Booking execution、Agent invocation和Provider journal均为0;结果GENERAL_NOTIFICATION,投影SUCCEEDED。
+按SourceMessage查询工作台:恰好1条SOURCE_NOTIFICATION,类型GENERAL、状态ACK_REQUIRED;关联order-task和task-card均为0。
+确认记录总数仍为10;该接口不带SourceMessage字段,因此不把其空关联筛选冒充直接来源证明。零任务、无员工确认及总数未变共同支持本轮未生成预订记录。
+
+统一记录默认今天显示本邮件为最新一条“手动上传”。发件人搜索恰好1条,加只看异常后为0条。
+浏览器进入其他通知实际看到1条,详情发件人、正文、附件与同一SourceMessage对应;未点击“确认”。
+工作台开放总数29,其中人工处理28、其他通知1、待确认业务任务0。
+
+## Acceptance correction and verification
+
+真实验收发现待办队列在外层工作台首次读取后缓存;从回放进入其他通知时未刷新,导致已经落库的通知暂时不可见。
+`EmployeePendingTasksView`现在在进入页面时调用既有强制刷新,继续复用共享队列及在途请求去重,不引入周期轮询或新的业务处理。
+补充“先缓存空队列、发布新通知、进入页面立即展示并更新侧栏数量”的回归:修复前准确失败,修复后7项相关测试全部通过。
+类型检查和439模块production构建通过;局部ESLint 0 error,34条均在本次未改动的既有模板排版行。
+Vite已加载修复,真实浏览器从AgentBus页进入其他通知,列表和侧栏均显示1条;再次打开同一运行详情仍正常完成且各步骤展示正确。
+
+本轮未修改后端、Agent/Profile/版本绑定或Secret,未重启后端;没有重复执行EML、ACK通知、确认任务、调用外部Agent或PMS/Opera。
+未提交或推送代码。自动监听来源的新样本验收仍独立待授权,不能用本次手动样本替代。
+
+## Related records
+
+- [统一处理记录实施证据](2026-09-08-agentbus-unified-records.md)
+- [当前状态](../../30-worklog/current-state.md)
+- [承诺清单](../../80-commitments/commitments.md)
diff --git a/.project-docs/50-evidence/topics/2026-09-08-project-completion-audit.md b/.project-docs/50-evidence/topics/2026-09-08-project-completion-audit.md
new file mode 100644
index 0000000..1434301
--- /dev/null
+++ b/.project-docs/50-evidence/topics/2026-09-08-project-completion-audit.md
@@ -0,0 +1,63 @@
+# Evidence Topic: 5178当前项目完成度核查
+
+## Metadata
+
+- Date / Last verified: 2026-09-08
+- Status: Current-release scope corrected by user; implemented scope ready for local business acceptance
+- Scope: 正式Wyndham-RSVN-0908 / 5178产品范围、核心代码、需求与验收记录
+- Confidence: Fact for observed implementation and reports; production readiness remains unverified
+- Source: 当前工作区、ADR036、真实邮件验收、前端本轮回归、后端既有报告、本机只读API
+- Stale trigger: 用户重新变更本期范围、新自动收件或FIT样本、生产部署验收、Agent绑定变化
+
+## Conclusion — corrected after user scope clarification
+
+用户明确其他发件人的通用处理本期不做,原“还有一块本期功能未开发”的结论撤回。
+按当前范围,QBD/普通LianTai、通知专用邮箱、员工工作台、确认记录以及统一处理记录均已实现,可进入5178集中业务测试与问题修正。
+自动监听来源与合法FIT姓名建档主要缺真实样本验收;正式数据库、账号权限、监控告警和部署验收在准备上线时完成,不阻断本地测试。
+本次核查不是全部代码路径的穷尽式缺陷审计,“进入测试”不保证不会发现新问题。
+本轮范围纠正仅修改文档,未修改应用代码、配置、Agent或业务数据,没有创建/委派子智能体。
+
+## Capability matrix
+
+| 能力 | 核实状态 | 证据与限制 |
+|---|---|---|
+| QBD与普通LianTai处理 | 已实现,有真实邮件闭环 | 两封获准邮件已经经过双Agent、校验、员工确认与记录;10条Group记录,6张缺Name 1 FIT正确保留人工处理 |
+| OPFIT通知专用邮箱 | 已实现且真实手动EML通过 | Replay 2097274461007613954,1.22秒,L3/L4及Booking Agent跳过,单GENERAL通知,无Agent调用/关联预订任务 |
+| 三入口工作台、任务确认、预订记录、通知确认 | 已实现 | router真实路由、BookingWorkbenchCardCommandService与相关测试;合法FIT姓名身份已有自动化覆盖,通知ACK只出队 |
+| AgentBus双来源记录、原详情、URL及刷新 | 已实现,自动来源真实新样本待验 | 同一Trace组件、只读来源适配与相应测试;本机近7天仅4条MANUAL_UPLOAD,0活动,无AGENTBUS样本 |
+| 其他发件人通用处理 | 本期不做 | 用户已明确撤出有效需求、开发待办和验收/上线阻断;未安排未来开发 |
+| 正式上线 | 尚未完成部署验收 | 正式数据库方案/迁移、登录权限、监控告警、审计保留、并发/多节点措施及依赖安全检查仍须闭合;本地就绪不能替代 |
+
+## Existing support boundary — not a current-release gap
+
+- `BookingMessageOrchestratorV2Impl.java:179`:非通知专用且无法识别固定渠道时,严格回放抛`STRICT_REPLAY_UNSUPPORTED_CHANNEL_PROFILE`。
+- `BookingContractsV2.java:72`:`SourceProfileCode`仅`QBD, LIANTAI`;当前Layer4仍要求已验证固定渠道来源。
+- `BookingMessageOrchestratorV2ImplTest.java:208`附近:`strictUnsupportedSenderStillFailsBeforeBusinessWrites`明确覆盖该拒绝行为。
+- 上述代码说明当前支持范围;用户已明确其他发件人不属本期,不据此安排开发、补测或阻断上线。
+- 本期不要求通用来源能力;不把接口默认`UnsupportedOperationException`误当缺口,当前对象存储和SuperAgent续接具体类均有实现。
+
+## Verification and coverage boundaries
+
+- 本轮前端:25文件、151项全部通过。
+- 后端读取已有163个Surefire报告:1000项中995通过、5跳过、0失败/错误;报告修改时间为2026-09-08 09:51–09:52 UTC。本轮未重跑后端。
+- 5个跳过分别是2项需要显式真实PG的验收、2项真实Agent验收、1项用户提供生命周期日志验收,不称为全部实际执行。
+- 上一轮类型检查和439模块生产构建已通过;本轮没有应用代码变化,不重复构建。
+- 本轮5178代理GET:health UP,build_time 2026-09-08T09:51:40.009Z;preview_ready、strict_execution_ready、notification_execution_ready均true,missing_configuration为空。
+- 近7天统一列表4条、全部手动上传、活动0。未发送邮件、上传新EML、执行Agent或确认/ACK任何事项。
+- 后续真实验收重点为:自动监听来信在统一列表和详情内贯通;有真实Name 1且无Tour Code的FIT确认建档;本期固定渠道的修改、取消、人工处理及失败场景。
+- 6张缺姓名FIT是现有业务待办,不把“员工还未补足姓名”算作系统未开发。
+- 当前改造和通知测试修复尚未Git提交/推送。独立仓库main历史已建立,不等于最新工作区已交付到远端。
+
+## Document reconciliation
+
+旧AGENTS分支、README早期checkpoint、部分ADR索引/HOLD描述存在历史残留。本次以最新current-state、独立仓库代码和真实验收为准。
+维护清单中“同仓库5174物理剥离未完”已被2026-09-08独立仓库提取取代,标记为历史关闭,不能重复列为当前开发缺口。
+缺价默认提示当前已按后端实际原因码显示,不把旧5174说明误计为5178未实现。
+没有更改既定产品边界:PMS/Opera写入不属于本期完成判据。
+
+## Related
+
+- [ADR036](../../10-decisions/adr-036-all-sender-booking-intake-and-notification-fallback.md)
+- [OPFIT真实验收](2026-09-08-opfit-real-eml-acceptance.md)
+- [QBD/LianTai真实闭环](2026-09-08-5178-real-eml-controlled-acceptance.md)
+- [统一记录实施验收](2026-09-08-agentbus-unified-records.md)
diff --git a/.project-docs/50-evidence/topics/2026-09-09-agent-response-reception-audit.md b/.project-docs/50-evidence/topics/2026-09-09-agent-response-reception-audit.md
new file mode 100644
index 0000000..8bfeaab
--- /dev/null
+++ b/.project-docs/50-evidence/topics/2026-09-09-agent-response-reception-audit.md
@@ -0,0 +1,88 @@
+# Agent回答缺尾:系统接收侧排查
+
+- 日期:2026-09-09
+- 用户问题:是否可能由本系统接收造成,而非Agent平台问题。
+- 结论:最近两次测试的四份回答,在绕过本系统独立查询的Provider原运行快照中就已缺尾,且与系统保存回答逐字相同。未发现本系统将完整回答接丢、拼接截断或保存截断的证据。具体为何生成/保存不完整回答,仍需平台内部原始模型输出和结束原因定位。
+- 边界:仅诊断、独立GET已有运行和离线验证;未修改应用源码、Agent/Profile/Secret或运行配置,未新建会话/运行、重放邮件、确认业务或重启服务。未使用子智能体。
+
+## 独立读取原运行
+
+用Python标准HTTP客户端、现有受控凭据向已配置平台的`GET /api/open/agent-sessions/{sessionId}/runs/{runId}`读取;绕过本系统Java HTTP客户端、SSE解析、业务校验和日志保存。凭据仅在内存中使用,没有输出或写入证据。
+
+五次请求均HTTP200、外层JSON完整,实际响应字节数与Content-Length一致。最近四份`final_content`仍为不完整JSON,平台status均为success。两份旧版及两份新版与本系统保存回答逐字符相等,SHA256相等。
+
+| 测试 | Provider Run | 原回答字符数 | HTTP响应字节数 | 独立查询结果 |
+|---|---|---:|---:|---|
+| 配置调整后Parsing | f01719f6-71b1-473d-b9ba-a4aec874ee9a | 4894 | 6850 | 最后review_requests空数组已返回,但缺最外层结束括号;与本系统一致 |
+| 配置调整后Booking | fe3de53d-9c88-47c6-83d1-0cc4e4741dae | 1315 | 2508 | 最后unclassified_texts字段名未闭合;与本系统一致 |
+| 调整前Parsing | 9dd6f3b3-b76f-49de-96b4-2249aeff75ff | 4891 | 6847 | 最后review_requests冒号后结束;与本系统一致 |
+| 调整前Booking | 9ea50c5f-74bd-49f5-a5d7-8b45b996158a | 1122 | 2432 | 最后unclassified_texts冒号后结束;与本系统一致 |
+| 更早成功Booking对照 | ccc6be28-419a-4307-89e4-415dd6517776 | 1688 | 2938 | 完整JSON,以unclassified_texts空数组和结束括号结尾 |
+
+最新Parsing session为`1d8e35eb-6a59-4dac-970c-38fb31fd7922`,Booking session为`b56d7ddf-3ed9-426e-81bc-700cf02dbaec`。其他身份和四份回答哈希见[现场证据](2026-09-09-live-replay-both-agents-incomplete.md)。成功对照回答SHA256为`03880df7f6455efb56bfa892efa832427dbc17deead46ebc8c94c201099b8ab7`。
+
+补充尝试直接GET最新两次原运行的`/events`:首次25秒、再次8秒均在取得可用响应前超时,没有取得可独立核验的事件流。此项未通过,不能据此断言平台end之后绝无更多事件,也没有将其算作成功验证。独立快照比较已经成功;现有应用journal中四份增量、final、快照、最终保存回答相等仍成立。
+
+## 本系统接收、拼接和保存审查
+
+当前8082部署JAR中的SSE Parser、Open API Client、BufferedJournalCapture与本地target/classes逐字节一致。JAR位于Git忽略目录`server/var/local-replay/runtime/agentbus-unified-records-20260908/`。
+
+- HTTP流通过UTF-8 InputStreamReader读取,SSE按完整行/事件组装;字段值只去除协议规定的一个可选空格,没有删除回答末尾字符。
+- 缺少end的断流会进入已有run恢复流程,不把部分内容直接当成功。公开Trace结果还要求run.completed;最终回答按同一消息增量与final的兼容前缀关系选取完整内容。
+- 原始日志观察发生在业务事件去重之前;原文直接传递到日志批次、数据库TEXT字段及SHA256计算,没有长度裁切。
+- 查看Trace使用的脱敏/摘要与原始回答保存分开;不影响原始final内容。
+- 已完成流之后还会独立GET原run快照确认状态;本次快照原文中的回答本身不完整。
+
+## 离线验证
+
+1. 对已有编译测试类执行`mvn -q -Dtest=SuperAgentOpenApiSseParserTest,SuperAgentOpenApiClientImplTest,SuperAgentProviderResponseJournalCaptureFactoryTest surefire:test`,直接使用现有编译产物,未重编译/部署应用。19个Parser、7个Client、2个Journal测试,共28项通过、0失败/错误/跳过。覆盖流接收、结束判断、断线恢复、已有run恢复及日志捕获。
+2. 另用与部署一致的Parser执行23项独立离线核对,全部通过:1/2/3/7/64/4096字节切片、多字节中文/emoji、转义、最后括号独立片段、延迟末尾读取、CRLF、end没有末空行、final为较短前缀时取完整增量、缺end拒绝,以及两次真实日志的四份流分别按1/7/4096字节重放。真实重放结果与保存原回答逐字相同,没有新增截断,也没有自动补齐。
+
+所有真实原文、独立读取脚本、离线探针及结构化结果均留在Git忽略目录`server/var/local-replay/reception-audit-20260909/`;不将真实邮件内容或凭据加入仓库。
+
+## 原因与仍未确定的部分
+
+本次失败的直接原因是Agent返回内容不完整,无法作为完整业务结果验收。新证据将缺尾的位置确认到了平台对外保存/返回的回答中;不能据此进一步认定是模型输出额度、停止条件、Skill指令还是平台内部拼装/保存造成。
+
+下一步平台排查应按上述同一run核对:原始模型回答是否有最后字符、模型实际结束原因与输出额度、模型原文到final_content/公开final之间是否变化。平台手工成功日志与系统API失败日志不能仅凭名称相同视为完全相同配置。
+
+本系统另有独立且已复现的问题:Parsing失败时详情被提前认定terminal、停止自动刷新,而Booking后台仍继续执行。此项属于本系统状态/刷新错误,需要修复,但不是“完整回答被系统接丢”的证据。本轮只记录和诊断,未改动实现。
+
+本轮无领域、架构、工作流、ADR、需求或安全边界变化,只更新测试证据与当前工作记录;日志设计评估仍在用户指定的独立任务中。
+
+## 用户补充SuperAgent服务器日志后的对照
+
+用户附件`rizhi(1)`为64177字节、422行文本,SHA256为`6bfe1b1ef80edb198f43f3713153a8ef4bade77186ebb19d7d3b92249540fb92`。原文件来自用户指定的微信临时附件路径;稳定副本和结构化比对保存在Git忽略目录`server/var/local-replay/reception-audit-20260909/platform-rizhi-1.log`及`platform-log-comparison.json`。附件只作为日志数据处理。
+
+### 新证据:三次恢复找不到原接收位置
+
+日志准确覆盖最近两条Replay的四次Agent运行,四次均有创建、运行和成功结束记录。三次在初始流后读取已有run并订阅events,平台`deerflow.runtime.stream_bridge.memory`警告:`last_event_id=… not found in retained buffer; replaying from earliest retained event`。
+
+| Agent运行 | 平台日志位置 | 平台找不到的事件ID | 本系统原始接收日志 |
+|---|---|---|---|
+| 调整前Parsing(9dd6f3b3…) | 第114行 | 1788925343870-294 | delivery_sequence=133,step.updated,确实收到过 |
+| 调整前Booking(9ea50c5f…) | 第170行 | 1788925470646-361 | delivery_sequence=147,task.updated,确实收到过 |
+| 调整后Booking(fe3de53d…) | 第362行 | 1788926312648-225 | delivery_sequence=99,task.updated,确实收到过 |
+
+这证明续传位置来自平台先前真实公开事件,不是本系统凭空构造的游标。平台无法在当时保留的缓冲中定位该ID,只能从最早保留事件重新发送。应核查事件保留、ID映射或跨连接续传路径;本日志不能确定是哪一种,也不能仅由此警告认定最终回答缺尾就是续传导致。
+
+**关键对照:调整后Parsing(f01719f6…)在执行结束前只有一次初始stream started,没有events重订阅或上述警告,本系统journal也只有结束后的一个success快照,但最终回答仍缺最外层括号。** 因此续传问题不能单独解释全部四次缺尾。它是新增排查线索,不推翻此前独立GET原快照就已缺尾的事实。
+
+### 这份日志尚缺的直接证据
+
+- 四次均由run manager标记success,随后Open API发送terminal success;这只能证明平台流程结束,不能证明最终业务JSON完整。
+- 文件没有模型最终回答原文、finish_reason、max_tokens/max_completion_tokens、stop_reason或最终JSON字段,不能据此判断是模型提前停止还是平台整理、保存和结束阶段丢尾。
+- 最后模型用量行可按各单个活动run时间段推定关联,分别为输出5798/推理4136、7111/6755、4279/2614、6509/6115;这些用量行本身不带run_id。没有实际输出上限和停止原因,不能宣称“额度耗尽”。
+- 工具注册日志同时出现`alibaba-qwen3-7-max`名称及`qwen-plus -> PatchedChatOpenAI`,不能仅凭名称或不带调用ID的日志判定实际主模型被错换;若核查模型绑定,应查看每次主回答真实请求中的model和限制参数。
+- 第224/230行与252/259行分别记录两个Profile的草稿修改/发布成功,支持用户确实执行配置变更;没有请求体,不能反推出改了哪项。
+- 文件中9次会话创建401和早期artifacts 404没有足够关联证明导致这四次缺尾。这四次各自的会话/流请求成功且实际执行完成,不将无run身份的401误认成本次执行失败原因。空闲sandbox回收也不等于活跃run被终止。
+
+### 优先给平台的具体核查样本
+
+优先使用没有重连干扰的Parsing run `f01719f6-71b1-473d-b9ba-a4aec874ee9a`,平台thread `88c29b53-3be8-4867-831e-5eef0eef819e`,session `1d8e35eb-6a59-4dac-970c-38fb31fd7922`。日志第272–318行覆盖其创建至结果查询,第313行模型用量、第316行success、第317行终态发出。
+
+请求平台对照同一次主回答的三处末尾内容:模型最终回答原文(无需推理过程)、平台运行中保存的最终回答、Open API公开final/final_content;同时提供模型实际结束原因和输出限制。若模型原文完整而后两处缺尾,应定位平台组装/保存/结束顺序;若模型原文已缺尾,再查实际生成限制和停止条件。目前只能将这些列为待验证分支,不能把某一分支当成已证实根因。
+
+第412–416行的五次原run GET与上一轮独立快照检查吻合;第418–421行平台确有接受已结束run事件查询的200日志,但没有相应terminal emitted。这为此前本地读取events超时补充了服务侧证据:平台接受了请求,但本次附件仍不能证明完整事件或结束标记已返回给客户端。
+
+本轮仅核对附件、既有journal及证据;没有新的外部请求、Agent运行、源码或配置修改,不追加无关测试。
diff --git a/.project-docs/50-evidence/topics/2026-09-09-agentbus-log-accuracy-fix.md b/.project-docs/50-evidence/topics/2026-09-09-agentbus-log-accuracy-fix.md
new file mode 100644
index 0000000..b04b53d
--- /dev/null
+++ b/.project-docs/50-evidence/topics/2026-09-09-agentbus-log-accuracy-fix.md
@@ -0,0 +1,53 @@
+# AgentBus 日志准确性修复
+
+- 日期:2026-09-09。
+- 状态:实现、全量后端打包、源码同步及用户批准的空闲切换完成;5178/8082已加载并通过7条历史记录只读核对。
+- 授权:用户明确现有日志主要给助手看,基本够用;只批准三项事实纠错,不创建子智能体。
+- 契约:[CR](../../../docs/project/requirements/CR-20260909-agentbus-log-accuracy.md)、[日志](../../../docs/project/requirements/M012-processing-run-lifecycle-log-v1.md)、[统一详情](../../../docs/project/frontend-backend/agentbus-eml-records-integration-guide.md)。
+
+## 已确认问题及修正
+
+1. 原Replay2097512443832668161的两类Agent journal各有FINAL_ANSWER,但provider_exchange仍固定写raw_answer_persisted=false。读取时改为按同阶段、调用、attempt及平台session/run核对现有最终回答记录;移除新快照的固定错误标记。完整原文保持原样,失败/缺尾回答仍保留,不把部分事件当成完整最终回答。
+2. 原Booking记录未取得任何非空用量,但阶段与读取器把null转为0。现在新快照和旧快照读取都保留null;平台明确报告的0仍为0。旧阶段没有匹配调用时返回未知,不借用新调用的数据。
+3. 原导出结束02:38:19.117818Z、273230ms,稍后记录结束02:48:18.135595Z、872248ms。旧详情补偿会在查看时写nowUtc,读取器又未取真实terminal_at;等待员工确认时completed_at为空,便可能采用被推后的Replay时间。隔离测试已复现并改为读取同酒店、同来源Processing Run的实际自动结束时间;后续确认与重复终态更新保留首次terminal_at,业务completed_at原义不变。历史究竟是哪次调用触发旧值变化,尚无逐次写入审计证明,不能归因到某个人的操作。
+4. 新Replay2097530868537724929已现场证明Parsing失败时terminal=true而Booking仍运行,详情因而提前停刷。修正为中途异常仍保留异常事实、后续自动工作继续时terminal=false;通知专用来源也等待投影实际成功或失败。用户界面仍使用现有10秒刷新,不新增标签或轮询入口。
+
+## 实现范围
+
+- 调试记录、Trace、来源Trace、旧Replay补偿共享实际终态与自动结束时间。
+- BookingTraceRunSnapshot读取已有terminal_at;PostgreSQL V2及兼容写入路径保留首次自动结束时间,不做表结构迁移或历史批量回填。
+- 阶段查询只增加同关联范围的FINAL_ANSWER身份元信息读取,完整正文仍只在按需日志读取时加载。全量日志保存标记从同次读取到的journal推导。
+- 合成测试覆盖保存/用量、跨调用与跨attempt隔离、中途失败、人工确认、通知投影、晚查看、无真实结束时间及错误酒店关联。元信息SQL测试刻意不建raw_content列,证明无需读取正文。
+- 前端未改;解析规则、Agent/Profile/版本/Secret、任务与通知业务规则、确认/ACK均未改。
+
+## 隔离与验证
+
+正式源码为Wyndham-RSVN-0908,含大量既有未提交修改。独立副本agentbus-log-fix-20260909从当前HEAD建立并叠加当前非忽略工作文件,保存源文件SHA256基线;未复制运行数据、.env或凭据。测试仅使用合成DTO、mock和隔离H2,无真实邮件执行或外部Agent调用。
+
+- 初始有效红测:3项失败,分别复现保存标记、未知用量和提前终态;无测试错误。
+- 专项修正后通过;旧来源Trace测试中“中途失败即终态”的错误预期已按现场证据修正。
+- 最终Maven package退出0;1,014项中1,009通过,5项原有外部验收按条件跳过,失败/错误均0。
+- 安装包:独立副本server/target/th-hotel-server-0.0.1-SNAPSHOT.jar;用户随后批准切换,运行情况见下节。
+- 未运行前端构建:没有前端修改,既有terminal轮询契约由服务测试覆盖;切换后已完成真实页面只读核对。
+- 两次准备错误已留在规划记录:初始脚本编码错误在执行前失败;Java record不能由现有Mockito模拟,改用真实合成DTO后取得有效红测。
+
+## 证据边界与下一步
+
+28个任务文件(13个实现文件、6个测试文件、9份文档)已逐个核对原SHA256并同步正式源码,无并行冲突;原文件备份、前后hash及精确差异保存在独立副本的任务规划目录。最终安装包SHA256为eecab1d886217a7464fd33a7bb2de9212865192c54d60129baffcab1ae44f4d8。文档完整性与git diff --check通过。
+
+平台原始回答缺尾并未由本次日志修复解决,仍由[接收侧排查](2026-09-09-agent-response-reception-audit.md)跟进。本次不推测平台未公开的停止原因,不扩大ADR-017/019留存边界。
+旧历史terminal_at若已被覆盖且无可靠证据,不伪造修复时间;本轮不批量修改数据库历史记录。
+
+## 用户批准后切换与核对
+
+用户明确回复“现在切换”。启动前两次只读核对Parsing/Booking/工作台投影队列均0;PG共7条运行(3 FAILED、1 VALIDATED、3 AWAITING_CONFIRMATION)。原launchd配置和包保留为回退依据,只修改JAR路径,启动命令其余内容、环境文件hash、JAVA_HOME、酒店、端口和数据目录保持原样;无表结构迁移。
+
+- 8082由PID10417正常退出并重载为27766;5178保持PID10488。实际打开的新包位于server/var/local-replay/runtime/agentbus-log-accuracy-20260909,H2仍为原th-hotel-simple/server/var/local-replay/h2,PG仍为原本机55432。
+- 8082健康UP,auth/me默认酒店HOTEL-LOCAL-REPLAY;8082和5178代理的预览、双Agent、通知就绪均true,缺配置为空。
+- 7条历史记录逐阶段journal数量和逐条原文hash全部与切换前一致;未将正文复制到新证据文件,只保留比较hash。已保存的Parsing和Booking最终回答标记均true;未知Booking用量各项null。没有最终回答的旧失败保持未保存,不补造成功。
+- 原问题Replay2097512443832668161显示273183ms;PG真实terminal_at为2026-09-09T02:38:19.070771Z,业务completed_at仍空。原导出273230ms取稍晚47ms的阶段时间,新口径统一采用自动处理事实时间;原872248ms延后查看时间不再影响展示。
+- 全7条重复读取稳定,列表/Trace/lifecycle结束时刻与毫秒耗时一致。通知时间字符串有5位/6位小数的既有格式差异,按同一UTC时刻比较相同,不属于时间变化。
+- 实际5178历史详情正常显示273.2秒,点击刷新后保持不变;现有待处理计数3待确认/29人工处理/1其他通知可见。未执行新邮件、Agent调用、业务确认或通知ACK。
+- 切换后PG队列仍全0,运行状态分布与切换前一致。中途失败仍刷新、后续员工确认不改变自动时间由合成回归覆盖,本轮未新造真实业务动作。
+
+切换核对中的两项检查脚本问题均已纠正:构建元信息实际在JAR根META-INF;时间比较最初使用原字符串/旧Python ISO解析,改为按UTC时刻解析后7条均通过。没有因此更改产品代码或历史数据。
diff --git a/.project-docs/50-evidence/topics/2026-09-09-agentbus-log-sufficiency-audit.md b/.project-docs/50-evidence/topics/2026-09-09-agentbus-log-sufficiency-audit.md
new file mode 100644
index 0000000..f525144
--- /dev/null
+++ b/.project-docs/50-evidence/topics/2026-09-09-agentbus-log-sufficiency-audit.md
@@ -0,0 +1,52 @@
+# AgentBus EML全流程日志信息充分性评估
+
+- 日期:2026-09-09
+- 状态:评估完成;后续产品决定为维持现有日志结构,仅实施三项准确性纠错
+- 范围:现有双来源共用阶段详情、日志复制/导出及Parsing/Booking公开通信证据;保持现有详情结构,无新顶部摘要、Dashboard或第二套处理链。
+- 依据:当前实现、M012 lifecycle V2、ADR-017/019、用户失败日志及随后平台手工运行日志;本机同一record/trace只读核对。
+
+## 结论
+
+用户随后明确日志主要交给助手分析,不需要人工翻译;按这一使用方式,现有日志基本够用,原始回答和最终产物已经有记录。此前广泛增强建议不再作为本期建议或待开发项,不新增状态标签、输入全文留存或产物汇总。
+用户仅批准纠正已保存却写未保存、未知用量显示零及完成耗时变化;相关提前终态问题也在同一时间口径内修正。实施与验证见[修复证据](2026-09-09-agentbus-log-accuracy-fix.md)和[CR](../../../docs/project/requirements/CR-20260909-agentbus-log-accuracy.md)。下文保留原评估依据与历史建议,不表示已批准实施。
+
+## 已有能力
+
+- 同一Processing Run串联14个阶段及输入/输出、时间、问题、证据引用和Agent身份;双来源复用同一读取器。
+- 两类Agent按attempt保存原始公开事件、run snapshot、最终回答、投递序号与hash;journal读取失败明确503,部分失败内容保留。
+- 本次439条Parsing journal可核对四处相同的缺尾回答,证明显示/导出没有截断最终内容;302条Booking journal保留后续运行证据。
+- 复制和导出使用同一对象及序列化结果,按需读取,不随活动详情轮询完整下载。
+
+## 建议优先补强
+
+| 项目 | 当前证据/缺口 | 建议产品行为 |
+| --- | --- | --- |
+| 原始Agent输入/最终回答易取用 | Parsing阶段input是计数摘要;完整请求本次从Provider回显的user message.delta取得,没有稳定的出站原文留存。阶段output还可能是系统组装/保底结果,不能等同Agent原始回答 | 在原Agent阶段明确区分原始输入、原始回答、系统采用结果,提供原样复制/导出完整输入(含前置指令)与回答,绑定同一attempt和run;未留存应明确说明,不能据当前规则重建冒充历史输入 |
+| 具体失败说明 | Parsing为UNAVAILABLE/INVALID_PROVIDER_RESULT但issues为空;parsingFailureIssue仅在execution.status=FAILED且有safeErrorSummary时填充,本次REVIEW_REQUIRED路径不满足 | 记录失败发生于连接、等待、答案读取、格式检查或引用检查;已知时给字段/位置和下游处理方式。区分平台报告完成、回答是否可读取、系统是否采用,不凭缺尾推断平台为何停止 |
+| 日志口径一致 | Parsing/Booking均硬编码raw_answer_persisted=false及未保存原因,而journal实际各有1条FINAL_ANSWER;SOURCE_CAPTURE正常Parsing排队在日志为WARNING,前端另行映射成功 | 按实际权威留存位置说明已保存/未留存/读取失败;正常排队作为正常过程,不给误导性告警;保留技术阶段失败与正常人工业务结果的区别 |
+| 时间与读取时点 | 原导出已terminal,总耗时273230ms;当前record/trace均terminal并为872248ms,完成时间变为02:48:18.135595Z。读取器存在terminal/updatedAt等来源回退 | 核查并统一自动处理结束时间,结束后耗时固定;补读取时间和必要的来源说明,区分排队/平台等待/系统验收。此评估确认前后不一致,未独立证明造成变化的具体写入步骤 |
+| 实际业务产物解释 | projection输出confirmation_items共5项(3有效、2Risk),不等于5张业务卡;此前同SourceMessage只读核对为3待确认卡和1人工处理通知 | 在原投影阶段说明实际保存的任务/通知数量、身份及关联,区分候选项和实际产物;状态标清发生时或读取时,不把当前状态伪装成历史完成时状态 |
+
+## 平台运行信息的边界
+
+已有Profile/session/run及部分版本信息,model/token字段也已预留,不能重复声称这些字段全部缺失。
+但本次原始公开记录没有模型/用量/结束原因,当前结果DTO不保留finish_reason为独立审计字段。
+建议按平台实际提供能力补全当次模型、实际Profile版本、用量、结束原因与本地等待设置,并明确“平台未提供”“本系统未留存”“读取失败”的区别。仅补系统日志无法创造平台没有返回的根因证据。
+
+## 既有决定与变更边界
+
+M012第3节明确不复制出站正文,ADR-019的compact输入与短引用映射为瞬时材料;要保证每次均能取得完整实际发送输入,会扩大现有日志留存范围。
+实施时应先形成对应Change Request并明确受控排障范围、保留期和原文边界,不能借本次评估静默改写既有决定。现在从既有Provider回显提取原文不等同已建立可靠出站留存。
+本建议不要求保存请求头/凭据、不推导隐藏思考、不改变业务判断、异常定义或员工确认流程。无需新摘要卡、统计图或独立诊断包。
+
+## 验证与限制
+
+仅进行源码/契约/用户提供日志比对,以及同一Replay的record/trace GET读取;没有重新执行邮件、调用Agent、写业务数据或创建子智能体。
+本轮未运行应用测试,因为没有应用实现修改;未来实施须验证旧记录缺失说明、新记录原文一致、双Agent/双来源、异常与终态时间。
+
+## 证据入口
+
+- [本次失败及平台手工复跑对照](2026-09-09-liantai-parsing-incomplete-final.md)
+- [生命周期日志契约](../../../docs/project/requirements/M012-processing-run-lifecycle-log-v1.md)
+- [原始公开返回边界](../../10-decisions/adr-017-superagent-complete-public-response-journal.md)
+- [Parsing瞬时输入边界](../../10-decisions/adr-019-parsing-agent-compact-handoff.md)
diff --git a/.project-docs/50-evidence/topics/2026-09-09-liantai-parsing-incomplete-final.md b/.project-docs/50-evidence/topics/2026-09-09-liantai-parsing-incomplete-final.md
new file mode 100644
index 0000000..9cca538
--- /dev/null
+++ b/.project-docs/50-evidence/topics/2026-09-09-liantai-parsing-incomplete-final.md
@@ -0,0 +1,110 @@
+# Evidence Topic: LianTai Parsing Agent最终返回不完整
+
+## Metadata
+
+- Date / Last verified: 2026-09-09
+- Status: Immediate failure cause confirmed; provider-side early termination reason unresolved
+- Scope: 用户提供日志及同一运行只读排查;不重新执行、不修改应用/Agent/配置
+- Confidence: Fact for malformed response and downstream results
+- Source: 用户粘贴lifecycle-v2日志、平台公开事件与run snapshot、当前同一Replay/工作台API、解码与异常策略源码
+- Source log SHA256: `278d57872ae4fb2e59c60c2dfe4ac0359c7acbc396c37b21485b45030315fb73`
+- Stale trigger: 平台提供结束原因、新受控测试或相关接收实现变化
+
+## Identity
+
+- Replay: `2097512443832668161`
+- Processing Run: `booking-v2-390bb9e1-6b32-4a93-8eb8-a730a44b2d6d`
+- SourceMessage: `2097513763956297730`
+- Parsing execution: `fcpa-exec-c04b0c69b68d4c96ceff7a7aceb32ba1`
+- Parsing provider run: `96cdde78-a90b-4228-ba80-3d888ccabb47`
+- 渠道:普通LianTai,不是OPFIT通知专用路径。
+
+## Immediate cause
+
+Parsing Agent公开最终回答共3890字符,末尾停在`"review_requests":`,缺少字段值和JSON闭合。
+离线标准JSON解码在字符3890处报Expecting value;系统严格Decoder同样不能接收完整对象,LocalPipeline把解码失败映射为`INVALID_PROVIDER_RESULT`。
+整份Parsing补充返回被拒绝,不做猜测性补全;既有确定性Parser结果保留并继续后续处理。
+
+同一回答出现在四处,逐字一致:该message的流式片段合并、PUBLIC_EVENT `message.final.text`、RUN_SNAPSHOT `final_content`以及FINAL_ANSWER。
+其SHA256 `ef5b3b2e25838076348f1327456ad91ccf07e61a242642576ef86cc80fc46ed4`与已保存response_sha256一致。
+因此原始平台最终返回已经不完整,不能归因于详情页或导出显示截断。原文未复制进仓库。
+
+平台同时发送`run.completed(status=success)`和`end`,查询快照也为success/error=null。
+日志没有模型、输出token量、finish_reason或输出上限信息,不能断言是模型长度限制、余额、超时或系统接收裁剪。
+下一步若继续追查,应核对上述同一平台run的结束原因和输出设置;此次排查未调用外部Agent或新建运行。
+
+## Stage and product outcome
+
+- EML、材料、Layer1/2、确定性Parser均成功;Source Capture warning仅指Parsing排队,不是失败根因。
+- Parsing Agent耗时106024ms,1次attempt,REVIEW_REQUIRED / INVALID_PROVIDER_RESULT。
+- Booking Agent耗时162871ms,真实调用与系统接收均成功;输出2个UPDATE_BOOKING、1个NEW_BOOKING目标。
+- Layer6为VALID,3个目标,无blocker或review;本次日志已有5个确认项,其中3有效、2Risk,不等于5张业务任务。
+- 当前按SourceMessage只读查询:3张PENDING_CONFIRM业务卡(2修改、1新建),1条RISK/ACK_REQUIRED来源通知;RISK在5178归入人工处理。
+- 没有确认任务或ACK通知,不把候选任务视为已确认预订记录,也不声称全部备注已成功提取。
+
+统一记录读取把Parsing的INVALID_PROVIDER_RESULT视为确凿系统异常,即使业务run已经AWAITING_CONFIRMATION,也会显示FAILED/abnormal=true。
+本次“失败”和“待确认”并存是一个阶段发生技术失败、其他可用结果继续生成所致,不是员工尚未确认导致误判。
+底层Replay当前已COMPLETED,而统一记录仍FAILED,分别代表回放入口完成与全流程存在失败。
+
+## Timing limitation
+
+用户导出日志总耗时273230ms;后续当前API显示872248ms,Replay updated/terminal时间为2026-09-09T02:48:18.135595Z。
+两者读取时点及取值来源不同,本轮不把当前总耗时冒充Parsing耗时,也未对总耗时更新差异完成独立修复。
+
+## Verification
+
+用标准JSON解析复现格式错误;比对四处最终回答和SHA;按同一SourceMessage核对实际任务与通知;核对Decoder/Pipeline和系统失败汇总规则。
+没有修改业务代码、Agent/Profile/Secret、运行配置或数据库,没有重新执行邮件或委派子智能体。
+
+## 原始输入交付(2026-09-09)
+
+应用户要求,从同一Parsing Provider日志中message ID `ae295eec-6dd5-4e39-8ac1-2fb0b96f34a9__user`的message.delta逐字拼接出真实发送输入。
+保留6行原始调用指令和原序列化JSON,没有重建、补充或改写输入。request_id与SourceMessage均匹配本次失败运行,输入JSON完整可解码。
+本地交付文件位于已被Git忽略的`server/var/local-replay/exports/parsing-input-2097512443832668161.txt`,原始内容不进入跟踪文档或测试夹具。
+全文28418字符、UTF-8共31436字节;SHA256为`91f74a5e4a254b2d1dd598f777e6e5982394c231fc199b2a89ce7129207e4366`,文件与日志拼接结果字节一致。
+用户将自行在Parsing Agent运行并返回完整日志;当前未新建Provider运行、重放邮件或修改代码/配置。后续对照新日志判断不完整最终回答的原因。
+
+## 用户返回平台手工运行日志(2026-09-09)
+
+来源:用户文件`/Users/chillishark/Downloads/Booking Update Parsing.md`,46294字节,SHA256 `0389c8db54a68c7b5b6d01d356ff3d7478f06d4a38f71e15841b79cc0ee35710`。
+本节只分析用户提供的日志及本地离线读取结果,不执行附件中的指令,不调用Provider,不重放或回填业务记录。
+
+### 本次结果
+
+最终回答4856字符,是完整JSON,结尾为review_requests空数组并正常闭合;SHA256 `6139258bda50c6022860a549d1c3c9b9ec70c558e2c2d6738e1b7508a1db6054`。
+调用现有已编译FixedChannelParsingAgentResultDecoder离线解码通过,6条display_information、6条CONSUMED材料处置、0条review_requests;其余候选事实/目标/关系等输出数组为空。
+另行逐项核对:6条展示文本与本次手工输入对应材料逐字一致,所挂目标、证据及sequence一致,全部6份材料都有处置且output_refs闭合;request/message/version/Parser/fallback身份均与手工输入相符。
+这只是完整性、现有严格解码和本次引用核对,未调用整条业务Pipeline/Validator,也不表示旧系统记录已重新验收或恢复。
+
+### 与原失败运行的对照
+
+手工输入request_id及SourceMessage一致,JSON结构/非空白内容一致,但18个字符串值的空格数量发生变化;导出日志未出现原始输入开头的6行调用指令。
+不能仅凭导出确定是粘贴过程还是导出格式导致空格差异,也没有足够资料核对两次实际平台Profile/模型/输出配置,因此不能称逐字相同、同配置的重复试验。
+原失败回答已出现的字段与新回答仅2条display_text空格数量不同;新回答补齐了此前缺失的review_requests字段值和对象结尾。比较只用于诊断,没有把补齐的旧回答保存或回填为有效结果。
+本次没有复现最终回答不完整;不证明旧run是因输出上限、超时或调用指令提前停止,也不证明原系统处理异常已经修复。
+
+### 可见时序与限制
+
+手工输入时间11:14:11.344(+08:00),日志共7次read_file调用;首次11:14:13.481至11:14:48.626,耗时35.145秒。
+其余调用按1、2、3个一组展开,最后一次工具结束11:15:05.517,最后Assistant消息标时11:15:08.075;这不是完整回答结束时间。
+导出时间11:16:37也不是运行结束时间,不能用两者冒充精确总耗时。日志未给出模型/用量/finish_reason/最终完成事件,首次读取等待不能解释旧run截断。
+下一步仍是核对旧Provider run `96cdde78-a90b-4228-ba80-3d888ccabb47`的结束原因及当次模型/输出配置。
+
+## 第二份平台手工运行日志:原始前置指令已包含(2026-09-09)
+
+用户文件`/Users/chillishark/Downloads/Fixed-Channel Parsing Agent (16).md`,41540字节,SHA256 `5a998ab2ae477cac174767e30c2659795c90aee7c1cbc5087907382e952dd1a2`。
+本节继续原对话的测试跟进;日志改造充分性评估已移交独立对话,本轮不扩展该评估或修改其文档。
+
+本次输入包含原文件开头6行调用指令且逐字一致;JSON数据与第一次手工运行输入完全相等,较原始系统输入仍有同样18处字符串空白差异,非空白内容与身份相符。
+最终回答4856字符,与第一次手工成功回答逐字一致,SHA256同为`6139258bda50c6022860a549d1c3c9b9ec70c558e2c2d6738e1b7508a1db6054`。
+再次使用现有已编译FixedChannelParsingAgentResultDecoder离线解码通过;6条展示文本逐字对应本次输入材料,目标/证据/顺序匹配,6份材料处置覆盖且引用闭合;request/message/version/Parser/fallback身份均一致,review_requests为空。
+没有运行完整业务Pipeline或回填旧运行。本次成功说明带上原始6行指令也能得到完整回答,不能把这些指令直接认定为旧run提前停止的原因;两次成功也不能证明旧系统记录已修复或同一生产调用条件已复验。
+
+日志输入时间11:29:58.195(+08:00),共7次read_file;首次读取12.885秒(第一次手工运行是35.145秒),最后工具结束11:30:26.912,最后Assistant标时11:30:28.772。
+日志导出时间11:31:42,不是完整回答结束事件;不能将消息标时或导出时刻作精确总耗时,也不能以首次读取更快直接解释旧run缺尾。
+本轮只读分析并离线读取验证,未调用外部Agent、重新执行EML、修改代码/配置、确认任务或创建子智能体。测试原文/临时结果继续放Git忽略目录,不写入跟踪资料。
+
+## Related
+
+- [当前项目状态](../../30-worklog/current-state.md)
+- [统一记录异常口径](2026-09-08-agentbus-unified-records.md)
diff --git a/.project-docs/50-evidence/topics/2026-09-09-live-replay-both-agents-incomplete.md b/.project-docs/50-evidence/topics/2026-09-09-live-replay-both-agents-incomplete.md
new file mode 100644
index 0000000..9343a23
--- /dev/null
+++ b/.project-docs/50-evidence/topics/2026-09-09-live-replay-both-agents-incomplete.md
@@ -0,0 +1,85 @@
+# 5178新上传现场监听:双Agent返回缺尾与详情提前停止刷新
+
+- 日期:2026-09-09
+- 状态:用户上传的新运行已监听至自动处理结束;确切格式错误及刷新问题已复现,平台为何产生缺尾仍未确定
+- 范围:原对话继续跟进测试;日志改造评估属于独立对话。本轮未修改应用代码/Agent配置或触发新运行。
+- 用户操作:用户在当前侧边浏览器选择、上传并开始执行;本助手只读观察API/页面,最终点击一次“刷新阶段索引”查看已结束结果。
+
+## 本次运行身份
+
+- Replay:2097530868537724929
+- Processing Run:booking-v2-ebc2ca25-93c9-48dd-a78c-ba58b741274a
+- SourceMessage:2097530885394632706
+- 普通LianTai发件人,非OPFIT通知路径。
+- 自动处理开始:2026-09-09T03:41:47.982697Z;结束:03:46:24.908224Z;总计276925ms(约4分37秒)。
+- 原始只读快照/逐次观察/完整终态日志保存在Git忽略目录:server/var/local-replay/watch/2097530868537724929/。
+
+## Parsing Agent
+
+- 阶段耗时126380ms,1次attempt,INVALID_PROVIDER_RESULT / REVIEW_REQUIRED,展示UNAVAILABLE。
+- Provider run:9dd6f3b3-b76f-49de-96b4-2249aeff75ff;session:5c7dc13e-a2b8-4252-94e6-1f226f0326c0。
+- 实际Profile:ea56cb01-72f0-4ef2-9a73-40cfae1abcd4;版本:b9cfb566-2d43-4645-9a91-9d79c18831b0,与首次失败运行相同;调用来源open_agent_api。
+- 最终回答4891字符,停在最后review_requests字段冒号之后;标准JSON解码在第146行第21列(字符4891)Expecting value。
+- SHA256:188ac6bd1148cf5211a12253e4c2f079c2306c58d40f14dada20addc7b5e34b0。
+- 572条journal中,该消息delta拼接、公开message.final、success run snapshot、保存FINAL_ANSWER四处内容一致;平台同时给run.completed success及end。
+
+## Booking Agent
+
+- Parsing补充结果拒收后,现有Parser事实继续进入Layer4,Booking Agent仍被正常启动。
+- 阶段耗时149718ms,其中Provider149713ms,系统验收1ms;最终BOOKING_AGENT_CANDIDATE_CONTRACT_INVALID,失败位置INFORMATION_SYSTEM_ACCEPTANCE。
+- Provider run:9ea50c5f-74bd-49f5-a5d7-8b45b996158a;session:ab3b2d6e-603e-4fa0-a285-69d0cbdf38b7。
+- 最终回答1122字符,停在最后unclassified_texts字段冒号之后;标准JSON解码在字符1122处Expecting value。
+- SHA256:a787045be31197ea2cdb0a63c3ae350e87ab3310b758b5d565170f3686f5b769。
+- 262条journal内,该消息delta拼接、公开message.final、success run snapshot、保存FINAL_ANSWER四处相同;同样有run.completed success及end。
+- 这是返回格式失败,并非直接认定业务目标判断错误。没有补齐、注入或接收不完整候选回答。
+
+## 最终业务结果
+
+- EML接入、Source捕获、Layer1/2、确定性Parser及Layer4成功。
+- Layer6 BLOCKED / UPSTREAM_REAL_AGENT_FAILED,系统run最终FAILED;本次没有进入正常候选结果投影。
+- 结束后只读查询完整第1页工作台45项、任务卡19项(page_size=100覆盖所有项),按本SourceMessage精确关联未找到新工作台项或任务卡。
+- 不把前一次运行的3张待确认卡及1条人工通知误认成本次新产物;未确认任务、ACK通知或写入预订记录。
+
+## 详情提前结束已实证
+
+观察日志03:44:00.843Z起:trace.terminal=true、总状态FAILED、总耗时127032ms,但booking_status=BOOKING_AGENT_IN_PROGRESS且Layer5 RUNNING;这一组合一直持续至03:46:01的观察。
+03:46:31后台只读结果已变为Booking FAILED、Validation BLOCKED、总耗时276925ms,监听在再次读取稳定后停止并保存完整终态日志。
+浏览器在此后getAXState仍无变化,仍显示Layer5执行中、总耗时127.0秒;点击“刷新阶段索引”后才变为Layer5失败、Layer6上游阻断、总耗时276.9秒。
+因此“处理存在异常”和“所有自动步骤已经结束”当前混为一个terminal判断,导致详情在后台仍工作时提前停轮询。源码trace.terminal遇systemProcessingFailed立即返回true,前端scheduleTracePoll收到terminal即停止,与现场一致。
+此问题属于状态/刷新正确性缺陷,记录供后续修复;本轮没有改代码。该实证不能自动解释首次旧日志273230→872248ms的另一处时间变化。
+
+## 诊断范围收敛与仍未知
+
+现在已在两个不同系统Parsing run中复现相同最后字段缺尾,新运行的Booking也出现同类问题;两份用户平台手工Parsing导出均完整。
+应优先核对系统Open API调用与平台手工运行的实际配置、输出处理和结束条件;现有证据不能区分模型生成、平台组装/裁剪、配置差异等具体原因。
+当前应用观测到的完整公开返回已缺尾,不能归因于详情显示截断。新旧Parsing实际Profile/版本相同,但手工日志未给足资料证明其实际绑定与系统相同。
+旧运行Booking最终回答曾完整结束于unclassified_texts空数组,因此不能仅凭本次现象断言所有空数组结尾必然被裁剪。
+未执行自动重试、再次上传或任何新Agent调用,也没有创建/恢复子智能体。
+
+## 配置调整后的再次监听(12:00结束)
+
+用户说明已更改配置并要求重新监听;具体配置项尚未说明,但两个Agent实际Profile版本都已变化,确认新版被本次运行采用。
+用户自行完成上传及二次确认,本助手未点击执行,只持续读取该新run并在完成后刷新一次详情。
+
+- Replay:2097534457943396353;Processing Run:booking-v2-d043e9fe-772d-40fa-9c48-455e2d547214;SourceMessage:2097534595730477057。
+- 开始2026-09-09T03:56:32.576481Z;结束04:00:08.903297Z;总耗时216326ms(3分36秒),run最终FAILED。
+- 原始快照、逐次观察、完整终态日志和比对结果保存在Git忽略目录server/var/local-replay/watch/2097534457943396353/。
+
+Parsing实际Profile仍为ea56cb01-72f0-4ef2-9a73-40cfae1abcd4,版本由b9cfb566-2d43-4645-9a91-9d79c18831b0变为f303ce82-7386-4f7c-9aa9-dec4c64bbb6c。
+Provider run f01719f6-71b1-473d-b9ba-a4aec874ee9a,session 1d8e35eb-6a59-4dac-970c-38fb31fd7922。
+耗时93659ms;最终回答4894字符,这次已包含review_requests空数组,但缺最外层结束括号。JSON解析在第146行第24列失败,仍为INVALID_PROVIDER_RESULT。
+最终SHA256为39f21a6f8e33fb679614ff1af905bed758acf395b201f81d33f1f4a59bb83b81。555条journal内流片段合并、公开final、success快照、FINAL_ANSWER四处一致,平台仍有success及end。
+
+Booking实际Profile仍为85ab8334-4e1c-4716-8ec0-9c3c099cec9b,版本由05589c54-3578-4cd9-8080-e631972154a8变为aa3dfa61-629f-4926-9cb5-4de101ff83dc。
+Provider run fe3de53d-9c88-47c6-83d1-0cc4e4741dae,session b56d7ddf-3ed9-426e-81bc-700cf02dbaec。
+耗时121982ms;最终回答1315字符,在最后unclassified_texts字段名中结束,连该字段名的闭引号都未返回,JSON在字符1296报告Unterminated string。
+最终SHA256为1a64da880c0cfb9a7dc6cb6b6b876492a20b159e51bf26717250e1a57cc44d14。220条journal内四处回答一致,同样有success及end;系统拒收为BOOKING_AGENT_CANDIDATE_CONTRACT_INVALID。
+
+Layer6继续因上游失败被阻断;结束时只读查询全部工作台45项、全部任务卡19项,未找到本SourceMessage的新产物。
+详情仍在Parsing失败时提前terminal并把耗时固定于94.2秒,Booking当时仍在运行;手动刷新后才显示Booking失败、Layer6阻断、总耗时216.3秒,重复确认提前停刷问题。
+本次证明新版本已使用但返回完整性问题仍在;不能凭耗时更短或少缺几个字符宣称修复,也不能在未获具体配置项/平台原因前推断是何项设置导致。未补齐或回填结果、未改代码/Agent配置/业务数据、未新建Agent运行。
+
+## 关联
+
+- [首次失败与两次手工测试](2026-09-09-liantai-parsing-incomplete-final.md)
+- [日志信息充分性评估](2026-09-09-agentbus-log-sufficiency-audit.md)
diff --git a/.project-docs/60-reflection/cases/2026-09-08-dual-database-read-wiring.md b/.project-docs/60-reflection/cases/2026-09-08-dual-database-read-wiring.md
new file mode 100644
index 0000000..0f33336
--- /dev/null
+++ b/.project-docs/60-reflection/cases/2026-09-08-dual-database-read-wiring.md
@@ -0,0 +1,9 @@
+# 双数据库只读功能必须验证实际装配
+
+- Date: 2026-09-08
+- Trigger: 统一记录仓储SQL与单库测试通过,但本机双库运行首次查询返回503。
+- Finding: Booking模块显式注册的JdbcTemplate导致Spring默认主库JdbcTemplate自动配置退让。未限定的仓储构造参数因而使用了Booking数据库;“默认数据源为Primary”不等于“任意JdbcTemplate使用主库”。
+- Correction: 平台仓储明确注入名为dataSource的主数据源,并创建私有查询组件;不添加影响其他模块的全局Bean。
+- Verification: 新增Spring双库装配测试,只注册Booking公共JdbcTemplate且Booking库无平台表,真实验证平台时区和记录SQL仍读取主库。最终本机查询也通过。
+- Reusable rule: 跨数据库只读适配同时验证SQL、真实Bean装配和本机只读入口;不能以单库数据库兼容模式测试替代双库装配检查。
+- Boundary: 运行数据库、凭据及数据不复制进测试;仅用隔离合成数据模拟两个数据源。
diff --git a/.project-docs/60-reflection/reflection-index.md b/.project-docs/60-reflection/reflection-index.md
index a8b1b9a..5e36d1a 100644
--- a/.project-docs/60-reflection/reflection-index.md
+++ b/.project-docs/60-reflection/reflection-index.md
@@ -4,6 +4,7 @@ Use this index for second-order workflow lessons.
| Date | Reflection | Trigger | Action | Detail |
|---|---|---|---|---|
+| 2026-09-08 | 双数据库只读适配必须验证实际Spring装配 | 单库SQL测试通过但真实双库平台查询误用Booking JdbcTemplate返回503 | 显式绑定主dataSource、自建仓储私有组件,补两个数据源且唯一公共JdbcTemplate属于Booking的接线测试 | [Case](cases/2026-09-08-dual-database-read-wiring.md) |
| 2026-08-21 | 本地前端运行必须以主项目和单一启动入口为准 | 5178多次因临时worktree、PID或隐藏启动变量变化重新出现登录页 | 主项目固定`dev:5178`,本机DEV端口自身识别免登录;交还前核对cwd和真实登录跳转,后端不可用只显示服务状态 | [Case](cases/2026-08-21-local-frontend-runtime-single-source.md) |
| 2026-08-20 | 产品视觉验收必须逐个真实入口检查外壳、内容和卡片 | 根地址自动转到回放,首轮重复检查回放并把两个详情的白色外壳误报成整个产品已统一;用户指出四个列表仍是旧样式 | 以后按用户可见路由矩阵逐页实图;分别判断外壳、主题变量、卡片拓扑和真实链接,构建/组件测试不能替代页面级视觉验收 | [Case](cases/2026-08-20-ui-visual-acceptance-route-matrix.md) |
| 2026-08-18 | 本地全链运行时重启必须整体校验端口、酒店身份、数据库和双Agent配置 | 同一酒店身份变量遗漏在第二次运行时刷新中复发;本次由postflight在交还前发现,未影响任务/数据 | 人工重启也必须使用显式变量清单并硬核对listener、auth/me、8082/5178指定酒店capabilities、旧replay和五项队列;自动检查器升为高优先级候选 | [Case](cases/2026-08-17-local-replay-runtime-restart-integrity.md) |
diff --git a/.project-docs/80-commitments/commitments.md b/.project-docs/80-commitments/commitments.md
index d32e37c..3ae0087 100644
--- a/.project-docs/80-commitments/commitments.md
+++ b/.project-docs/80-commitments/commitments.md
@@ -4,8 +4,11 @@ Track future-facing memory: promised follow-ups, unfinished loops, timed checks,
| Date | Commitment | Trigger / Due | Owner | Status | Next Action |
|---|---|---|---|---|---|
-| 2026-09-08 | 将邮箱自动监听邮件与手工 AgentBus EML 回放统一为员工可查询的邮件处理记录;两类来源都能查看接收、处理、人工介入、完成或失败状态 | 用户完成当前剥离收尾并开始具体讨论统一方案时 | AgentBus / SourceMessage / 员工工作台 / 可观测性 | Active | 先讨论页面命名与信息架构、自动监听记录的查询模型、与现有 replay/processing run 的关联和历史数据范围;未确认前不改代码或数据 |
-| 2026-09-08 | 将ADR-036全发件人产品规则实现为员工可见闭环,同时保持QBD/LianTai专用准确性与LianTai FIT通知专用例外 | 开始修改sender路由、Parsing/Booking输入或失败回退前 | 产品 / Booking邮件处理 / Agent / 员工工作台 | Active | 先形成通用邮件处理Change Request:独立Layer2/3、Layer4只复用中性结构、复用Layer5–7;明确正文与附件支持范围、输入契约和失败终态。已形成具体任务的按校验进入待确认/人工处理并在确认后建档;无法形成任务的统一进入其他通知且确认不建档。验收至少覆盖通知专用邮箱、QBD、普通LianTai、自动任务、人工复核任务、无预订动作、信息不足/附件不认识/不确定及Agent/系统失败。每封邮件最终只能落入具体任务或可确认的其他通知,不得停在不可见FAILED |
+| 2026-09-09 | 已交付Replay 2097512443832668161原始Parsing输入并分析用户返回的平台手工运行日志 | 2026-09-09用户返回Booking Update Parsing.md后 | Parsing Agent失败诊断 | Completed | 本次完整JSON通过现有严格解码,6条展示与材料引用核对通过;输入导出缺原6行指令且有空格差异,未复现不等于旧run已修复。旧run结束原因及平台配置仍未知,详见2026-09-09排查证据 |
+| 2026-09-08 | 本期通用发件人范围残留已撤下 | 用户明确本期不做后 | 产品 / 项目记录 | Completed | ADR-036已撤出本期,需求/领域/架构/待办及完成度结论均已同步;不保留隐含后续开发承诺。当前先在5178测试修改,上线准备在决定上线时开展 |
+| 2026-09-08 | 将邮箱自动监听邮件与手工AgentBus EML回放统一为处理记录 | 用户批准双页签、紧凑列表、共用详情与通知专用测试CR后 | AgentBus / SourceMessage / 可观测性 | Completed | 统一只读列表及原Trace已实现并加载5178,筛选/URL/返回/刷新/异常口径通过;opfit复用正式通知规则、零Agent且投影后结束。前端150、后端995通过/5显式验收跳过,3条历史只读及浏览器验收通过;Agent配置不变 |
+| 2026-09-08 | 通知专用邮箱在新统一模块中的真实EML验收 | 用户提供获准EML后 | AgentBus / 通知测试 | Completed | Replay 2097274461007613954在5178单次执行1.22秒完成;L3/L4/Booking Agent跳过,L5生成1条GENERAL通知,零Agent调用/关联预订任务,L6通过,终态无异常。通知在工作台可见且未ACK,进入刷新回归通过 |
+| 2026-09-08 | 自动监听收件在新统一模块中的新样本运行验收 | 用户提供或授权自动收件样本后 | AgentBus / 统一处理记录 | Active | 自动来源适配已实现并通过隔离验证;本机目前4条均为手动回放,尚无新自动来源样本。后续核对真实系统接收时间、来源标识、SourceMessage/Processing Run详情及终态;不能用已完成的通知手动上传验收替代自动监听证据 |
| 2026-09-08 | 用用户后续提供的真实EML和业务数据验收5178完整闭环;AgentBus端Agent/Profile/版本绑定与配置已完成且本轮保持不变,新8082已成功复用,不把readiness冒充真实邮件或production验收 | 用户提供获准使用的真实EML和数据后;或进入上线准备阶段时 | AgentBus / 员工工作台 / 发布策略 | Completed | 两封授权EML已按受控应用流程闭环:QBD 7张Group卡确认、6张缺Name 1 FIT保留人工处理,LianTai 3张Group卡确认,两条通知ACK且不建记录;`FRESH_DELIVERY`投影与10条类型化记录已验证,AgentBus配置未改。production仍默认关闭,部署时继续验受保护运行值、正式权限、保留、监控和审计 |
| 2026-09-08 | 本地全绿不能替代真实数据库与部署安全门禁 | 首次staging/production部署前 | 数据库 / 安全 / 运维 | Active | 备份并预检FIT/Group唯一键后演练MySQL V35–V37与并发确认;在CI执行有效Maven SCA;多实例环境用网关/共享存储补全登录全局限流、失败审计和告警 |
| 2026-09-08 | 正式上线前确认正式数据库方案:使用全新空库,或沿用已有 MySQL 并保留原有业务数据 | 准备预发布或正式上线时 | 数据库 / 上线准备 | Active | 先确认正式环境是否已有必须保留的数据。全新空库直接创建最新版结构;沿用旧库时先备份、检查旧数据冲突,再补齐 5178 需要的数据字段和规则并验证。此事项不影响当前本地测试,本地测试数据不会自动进入正式数据库。 |
diff --git a/.project-docs/90-maintenance/stale-items.md b/.project-docs/90-maintenance/stale-items.md
index 9b2bd73..8b1a49b 100644
--- a/.project-docs/90-maintenance/stale-items.md
+++ b/.project-docs/90-maintenance/stale-items.md
@@ -4,8 +4,7 @@
| Date | Document | Issue | Needed Confirmation |
|---|---|---|---|
-| 2026-09-08 | ADR-034“剥离完成”、同仓库5174 reference mode及当前production边界 | **运行/构建剥离已通过,但源码物理剥离尚非绝对完成**:5178无旧路由/执行入口,production包无fixture/BR00;同一client仍保留5174参考页面,locale仍携带少量不可达旧文案,后端仍有未注册且forRemoval的迁移查询类 | 先确认5174后续是否只需tag/branch留档;若是,再从活跃5178分支删除参考源码、旧locale和不可达迁移类并重跑双向恢复检查。确认前不得把保留参考源码误报成5178运行能力,也不得擅自破坏5174验收基线 |
-| 2026-09-08 | ADR-012、system-overview中的“白名单入站”及当前QBD/LIANTAI-only输入实现 | **产品资格与路由架构已由ADR-036修订,代码尚未实现**:除LianTai FIT通知专用邮箱外,所有sender都必须尝试处理;QBD/LianTai保留专用路径,其他sender使用独立Layer2/3、Layer4中性结构和现有Layer5–7。已形成具体任务的进入待确认/人工处理;无法形成任务的统一进入其他通知。当前正式输入仅有QBD/LIANTAI来源类型,严格回放仍拒绝其他sender | 实施前先形成Change Request,不得简单删除sender检查、把未知来源伪装固定渠道或复活旧legacy路径;完成后再同步system-overview和运行证据,并覆盖具体任务、人工复核任务、无任务通知及失败回退验收 |
+| 2026-09-08 | ADR-034“剥离完成”、旧同仓库5174 reference mode说明 | **已被独立仓库提取关闭,原描述为历史快照**:正式Wyndham-RSVN-0908已物理排除5174运行页、路由和假回放;2026-09-08完成度核查复验当前正式路由与最新独立仓库证据 | 不再按旧同仓库状态重复安排剥离;以独立仓库发布证据和当前代码为准,历史基线不恢复到5178 |
| 2026-09-08 | 5178迁移完成说明、修复前自检与当前发布基线 | **本地阻塞与真实EML门禁已解决,旧审计结论已过时**:匿名写/XSS/IDOR、fixture泄漏、模式污染和后端红灯均已关闭;前端205、后端935及两套build全绿;两封真实EML形成10条确认记录和6张预期FIT人工处理卡 | 当前保留真实MySQL迁移与并发压测、production应用部署、CI Maven SCA、多节点登录限流及6张FIT真实Name 1核实为门禁;AgentBus端现有配置不需要重做,以真实EML acceptance evidence为准 |
| 2026-09-08 | ADR-033/034、AgentBus回放投影与当前运行环境 | **本地真实EML已验收,production部署未验收**:`FRESH_DELIVERY`可信结果已实证进入员工工作台,`PRESERVE_IDENTITY`继续排除;现有Agent/Profile配置未改。项目本地JDK17关闭TLS故障,5178常驻启动已固定正式mode | production保持既有AgentBus绑定并注入该环境受保护运行值,验正式权限、数据库、存储、保留、监控与审计;不得把本地真实邮件验收称为已上线 |
| 2026-09-08 | ADR-027/031/035、5178前端与服务端/Agent身份契约 | **端到端代码已对齐且真实Group/缺名FIT边界已复验**:10张Group卡按Tour Code建档;6张明确FIT因缺Name 1保持人工处理,无Tour Code→Name自动回填。合法有Name 1 FIT路径已有自动化覆盖,但本轮没有可确认的真实FIT样本 | 等获准的“有Name 1且无Tour Code”FIT样本再补真实建档实证;当前不得猜补6张FIT姓名,也不得把局部实证扩大为production验收 |
@@ -51,6 +50,9 @@
## Resolved This Cycle
+- 2026-09-08用户明确其他发件人通用处理本期不做。原ADR-036待实施条目及领域、数据流、待办中的相关要求已撤下;
+ 上次完成度核查将其列为本期缺口的结论已修正。本期以QBD/普通LianTai、通知专用邮箱及5178工作台为准,不能据历史记录恢复需求。
+
- 5174通知fixture曾把Payment列为Risk待判类型,并把其他通知限制为“整封邮件没有任务”。2026-09-07已修正文案,Risk演示项已
并入人工处理,同时保留通知身份与只确认动作;旧showroom测试已按当前页面对齐,全量前端383/383通过。
diff --git a/PROJECT_STATE.md b/PROJECT_STATE.md
index 7fddd1d..7d23fd8 100644
--- a/PROJECT_STATE.md
+++ b/PROJECT_STATE.md
@@ -1,5 +1,11 @@
# TH Hotel Simple 项目当前状态
+> 2026-09-08本期范围:通用发件人处理本期不做,已从有效需求和待办撤下;现有5178功能进入测试与修改,上线准备在决定上线时安排。
+> 2026-09-08更新:当前正式项目为Wyndham-RSVN-0908,最新状态以[项目状态](.project-docs/30-worklog/current-state.md)为准。
+> AgentBus统一处理记录与通知专用测试已实现并加载5178/8082,配置和既有历史保留;前端150项、后端995项通过,5项显式外部验收跳过。
+> OPFIT真实EML现已在5178单次运行成功:1.22秒、1条其他通知、零Agent/预订任务;待办进入刷新已修复并验证,通知未确认。
+> 本文件下方2026-08-18的分支、阶段和后续步骤为历史快照,不是当前实施指令。
+
| 项 | 内容 |
| --- | --- |
| 最近更新 | 2026-08-18 |
diff --git a/client/src/components/debug/AgentBusEmlUploadTest.vue b/client/src/components/debug/AgentBusEmlUploadTest.vue
new file mode 100644
index 0000000..7086f56
--- /dev/null
+++ b/client/src/components/debug/AgentBusEmlUploadTest.vue
@@ -0,0 +1,1691 @@
+
+
+
+ -
+ {{ index + 1 }}
+
+ {{ t(`agentBusEmlReplay.steps.${step.key}`) }}
+ {{ t(`agentBusEmlReplay.steps.${step.key}Hint`) }}
+
+
+
+
+
+
+
+
+
+ {{ t('agentBusEmlReplay.environmentEyebrow') }}
+
{{ t('agentBusEmlReplay.environmentTitle') }}
+
+
+
+
+
+
+
+ {{ t('agentBusEmlReplay.capabilities.feature') }}
+ {{ capabilityLabel(capabilities.replay_enabled) }}
+
+
+
+ {{ t('agentBusEmlReplay.capabilities.oss') }}
+ {{ capabilityLabel(capabilities.storage_configured) }}
+
+
+
+ {{ t('agentBusEmlReplay.capabilities.capture') }}
+ {{ capabilityLabel(capabilities.capture_enabled) }}
+
+
+
+ {{ t('agentBusEmlReplay.capabilities.downstream') }}
+ {{ capabilities.downstream_mode }} · {{ capabilityLabel(capabilities.downstream_ready) }}
+
+
+
+ Booking PostgreSQL
+ {{ capabilityLabel(capabilities.postgres_ready ?? false) }}
+
+
+
+ Layer 3 Parsing Agent
+ {{ capabilities.parsing_agent_profile_id || 'Profile 未配置' }}
+
+
+
+ Layer 5 Booking Agent
+ {{ capabilities.booking_agent_profile_id || 'Profile 未配置' }}
+
+
+
+
+ {{ t('agentBusEmlReplay.checkingEnvironment') }}
+
+
+ {{ t('agentBusEmlReplay.limits', {
+ eml: formatBytes(capabilities.max_eml_bytes),
+ frame: formatBytes(capabilities.max_frame_bytes),
+ }) }}
+
+ · 缺少:{{ capabilities.missing_configuration.join('、') }}
+
+
+
+
+
+
+
+ {{ t('agentBusEmlReplay.uploadEyebrow') }}
+
{{ t('agentBusEmlReplay.uploadTitle') }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ errorCode || t('agentBusEmlReplay.errors.UNKNOWN') }}
+ {{ errorMessage }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ t('agentBusEmlReplay.previewEyebrow') }}
+
{{ currentReplay.original_file_name }}
+
+
+
+ {{ currentReplayPresentation.statusLabel }}
+
+
+
+
+
+ {{ currentReplayPresentation.modeLabel }}
+ {{ currentReplayPresentation.legacyNotice }}
+
+
+
+
+
- {{ t('agentBusEmlReplay.mail.subject') }}
+ - {{ currentReplay.mail_summary?.subject || '-' }}
+
+
+
- {{ t('agentBusEmlReplay.mail.sender') }}
+ - {{ currentReplay.mail_summary?.sender || '-' }}
+
+
+
- {{ t('agentBusEmlReplay.mail.sentAt') }}
+ - {{ formatReservationDateTime(currentReplay.mail_summary?.sent_at) }}
+
+
+
- {{ t('agentBusEmlReplay.mail.media') }}
+ -
+ {{ t('agentBusEmlReplay.mediaCounts', {
+ inline: currentReplay.mail_summary?.inline_image_count ?? 0,
+ attachments: currentReplay.mail_summary?.attachment_count ?? 0,
+ }) }}
+
+
+
+
+
+
+ {{ t('agentBusEmlReplay.identity.replayId') }}
+ {{ currentReplay.replay_id }}
+
+
+ {{ t('agentBusEmlReplay.identity.mode') }}
+ {{ currentReplay.delivery_mode }}
+
+
+ {{ t('agentBusEmlReplay.identity.messageId') }}
+ {{ currentReplay.external_message_id || '-' }}
+
+
+ {{ t('agentBusEmlReplay.identity.conversationId') }}
+ {{ currentReplay.external_conversation_id || '-' }}
+
+
+
+
+
+
+
+
+
+
{{ t('agentBusEmlReplay.confirmEyebrow') }}
+
{{ t('agentBusEmlReplay.confirmTitle') }}
+
{{ t('agentBusEmlReplay.confirmHint') }}
+
+
+
+
+
+
+
+
{{ t('agentBusEmlReplay.confirmWarningTitle') }}
+
{{ t('agentBusEmlReplay.confirmWarning', { hotel: currentHotelLabel }) }}
+
{{ t('agentBusEmlReplay.noOpera') }}
+
+
+
+
+
+
+
+
+
+
+
+ {{ currentReplay.safe_error_code || errorCode }}
+ {{ currentReplay.safe_error_summary || errorMessage }}
+
+
+
+
+
+
+ {{ liveMessage }}
+
+
+
+
+
+
diff --git a/client/src/components/debug/AgentBusReplayTraceWorkspace.vue b/client/src/components/debug/AgentBusReplayTraceWorkspace.vue
index 7bf197f..e0f08f7 100644
--- a/client/src/components/debug/AgentBusReplayTraceWorkspace.vue
+++ b/client/src/components/debug/AgentBusReplayTraceWorkspace.vue
@@ -15,7 +15,9 @@
{{ presentation.legacyNotice }}
+ >
+ {{ presentation.legacyNotice }}
+
- {{ presentation.statusLabel }} · 每 2 秒更新
+ {{ presentation.statusLabel }} · {{ t('agentBusEmlReplay.records.polling') }}