Complete the selective V2 checkpoint with its minimal AgentBus, object-storage, replay persistence, and validated-workbench shared dependency closure.
42 KiB
M012 / Fixed-Channel Parsing Agent v1 Runtime Integration Change Request v1
| 项 | 内容 |
|---|---|
| 状态 | CP5 TEST SUPERAGENT BINDING + LIVE CONTRACT SMOKE COMPLETE — automatic worker / production HOLD |
| 日期 | 2026-08-14 |
| 最近修订 | 2026-08-17(公开Trace传递与安全投影本地完成;未复跑真实Provider) |
| 目标 | 信息系统消费公共 Parser 输出,调用 Parsing Agent v1.0,并在本地确定性合并 |
| 渠道 | QBD、LIANTAI;不含 LIANTAI_FIT |
| Checkpoint | M012-fixed-channel-parsing-agent-v1-runtime-integration |
| 影响范围 | Backend / Layer 3 contracts / SourceMessage / Booking worker / SuperAgent adapter / Booking PostgreSQL / Test / Docs |
| 发布边界 | 测试平台 Profile/Skill/外部应用已绑定并完成受控真实 Provider 冒烟;自动 worker、production、PMS/Opera 仍关闭 |
1. 背景与当前运行事实
固定渠道公共 Parser 已按 ADR-008 完成,QBD/LianTai 默认 parse() 均返回
ParserResult(meta,status,facts[],agent_materials[])。真实样本批准基线为:
- QBD:114 facts / 4 WAITING materials;
- LianTai:70 facts / 6 materials;
- 扩大 Parser 专项及真实样本:0 failures/errors。
Parsing Agent v1.0 已按 ADR-009 完成 Skill/schema/reference/fixture/validator/package 和独立中文 Main
Prompt,输出为中立 structured_mentions[],不再输出 Trace、部门或最终业务分类。当前 Agent 专项 22/22、
Python 全套 50/50、15成员 source/archive/manifest 严格校验均通过。2026-08-14 已将对应 Prompt 与 Skill
绑定到测试 SuperAgent Profile,并完成真实契约冒烟;源发布包仍保持 HOLD/INTERNAL_ONLY,不代表生产发布。
CP4 已在默认关闭的 v1 分支中接通上述公共契约;默认开关仍保留 legacy 链:
Current message + current attachment bytes
→ BookingPostgresMessageOrchestrator
→ BookingContractAssembler.parseLegacy()
→ optional old Field Recovery(默认/生产关闭)
→ legacy ParsedFactSet
→ Context / Layer 5
v1 分支现已具备 request/evidence builder、provider-neutral port、SuperAgent adapter、response validator、 local merger、Layer 3 effective result、pre-Context durable execution/worker、双入口 SourceMessage、Parser FAILED 受控fallback,以及latest Layer3ResultV2 direct handoff/同run current Layer4/5/6 continuation。旧compatibility projection只保留为CP6前legacy资产。测试平台绑定和真实 adapter 契约冒烟已完成;尚未做的是部署环境 Secret 注入、自动 worker 启用、完整 AgentBus→PostgreSQL 主链 smoke、业务 required-fact catalog、MySQL V30/运行保障 Gate和CP6 legacy退出。获批非生产 PostgreSQL V1–V6 migration/restart/lease/concurrency smoke 已于2026-08-12 通过;运行保障Gate尚缺告警/人工恢复运行手册。
2. 权威基线
实施必须同时遵守:
- ADR-008 与
M012-qbd-liantai-parser-output-contract-v1.md; - ADR-009 与
M012-fixed-channel-parsing-agent-v1-contract.md; - ADR-005 的 per-agent external app/token;
- SourceMessage 先落库、AgentBus callback 不等待外部 Agent;
- Layer 3 中立结构、Layer 4 Context/RateRoom、Layer 5 业务判断、Layer 6 Validator 的既有边界。
如旧 Recovery、C03-v2、Layer3ContractsV2、旧 contribution service 或历史 CR 与上述基线冲突,
只能作为迁移证据,不得扩展成新 v1 行为。
3. 目标与非目标
3.1 目标
- 两个入口都以持久 SourceMessage 作为 Current/History 唯一来源。
- 主链调用公共
parse()并保存 ParserResult,不在 v1 分支调用parseLegacy()。 - 信息系统确定性组装完整 v1 request 和 evidence registry。
- 通过 provider-neutral Port 调用 Parsing Agent,使用 fake/mock 完成常规验收。
- 信息系统严格校验 Agent 返回,并在本地确定性合并。
- 输出权威
effective_facts[]、中立structured_mentions[]和review_items[],并承接其余合法中立结构。 - 持久化执行状态、幂等、重试、审计与 failure codes,进程重启后可恢复。
- 将最终八数组Layer3无业务解释地投影latest Layer3ResultV2,并以同run续接当前Layer4/5/6;V2无槽位审计放sidecar。
- 以独立checkpoint退役compatibility/legacy,不在本次删除历史资产。
3.2 非目标
- 不修改已验收的 Parser 十类事实、QBD/LianTai Profile 规则或真实样本口径。
- 不让 Agent 覆盖 Parser facts、创建 TaskCard、写数据库业务状态或调用 PMS/Opera。
- 不让 Layer 3 决定 business type、Trace、linked action、部门、Rate Code 或 canonical Room。
- 不把 Main Prompt 放进 Skill 包,也不在本 CR 中修改 Prompt 内容。
- 不新增 Controller、MCP、浏览器或第三方入站接口。
- 不在首个 runtime checkpoint 删除所有旧 Recovery/legacy 资产。
- 不在代码合并时自动启用 production 或真实 Provider。
4. 目标数据流
Manual EML / AgentBus
→ capture or bind Current SourceMessage
→ resolve QBD/LIANTAI Profile
→ run public deterministic Parser on current attachment
→ persist immutable ParserResult + controlled fallback snapshot
→ create/reuse durable Parsing Agent execution
→ worker reloads Current revision + ordered History revisions
→ build history_bodies[] + evidence registry + request
→ request preflight validation
→ FixedChannelParsingAgentPort
→ strict result decoding + semantic validation
→ deterministic local merger + completeness review
→ persist authoritative FixedChannelLayer3Result
→ latest Layer3ResultV2 neutral projection + controlled audit sidecar
→ same-run current Layer 4 / Layer 5 / Layer 6
入口在 execution 入队后结束;Provider 等待只能发生在 worker。Worker 不依赖入口内存里的附件 bytes, 因为公共 ParserResult 和 fallback snapshot 已持久化。
5. 输入快照与调用规则
5.1 Current
- 读取确切
source_message_id + revision的完整 subject/body。 - Current attachment 只在同步 Parser 阶段使用;Agent 只接收 ParserResult 和登记后的文本 evidence。
- 当前正文不得由旧
BookingAgentInputMaterialPolicy裁剪或截断。
5.2 History
- 由内部 SourceMessage repository/query 按 conversation identity 和稳定 sequence 读取。
- 正文完整传递、不截断;每项固定 source id、revision、sequence、content hash。
- 不传 History 附件、附件文件名、附件 URL、附件 evidence 或附件 bytes。
- 后台 builder 不调用会产生“员工读取原文”审计副作用的 UI original-read service。
5.3 Parser Results
- v1 分支只消费公共
FixedChannelParserContracts.ParserResult。 - 当前首版维持一个消息中恰好一个匹配固定渠道 workbook 的既有不变量,是否扩展需审批。
- Parser
FAILED必须facts=[]且agent_materials=[];只能由外层受控 fallback/review 处理。 - material 的
target_ref按 Parser 契约可为null,不得为满足 Agent schema 伪造 target。
5.4 调用矩阵(已实现)
建议每个通过入口、酒店、SourceMessage 和版本校验的 Current message 至多创建一个逻辑 request:
| Current/Parser 条件 | 建议行为 | 状态 |
|---|---|---|
| Parser SUCCESS,有 facts/materials | 同一逻辑execution调用一次;fallback为空 | Implemented |
| Parser SUCCESS,只有 facts | 仍调用,以解析完整 Current/History | Implemented |
| Parser SUCCESS,只有 materials | 调用一次 | Implemented |
| Parser SUCCESS,facts/materials 均空 | body-only同样调用一次;不以正文关键词决定渠道/跳过 | Implemented |
| Parser FAILED,有系统授权 Current-only fallback | 同一逻辑execution调用;只使用持久化有界fallback | Implemented |
| Parser FAILED,无 fallback | 仍处理完整邮件主题/正文;附件生成稳定blocker | Implemented |
| 渠道/Profile/版本未验证 | 不外呼;入口或 request preflight 失败 | Implemented |
无论采用哪一矩阵,都必须以稳定 call/no-call reason code 和唯一 request hash 审计。
6. Evidence Registry 提案
6.1 Evidence 类型
- Current subject;
- Current body;
- ordered History body;
- Parser facts/materials 的准确来源引用;
- 信息系统显式授权的 Current-only fallback。
History attachment 永远不属于 registry。
6.2 稳定身份
建议 ID 输入至少包含:
evidence_schema_version
source_message_id
source_revision
scope/current_or_history
section/subject_or_body_or_parser_or_fallback
unicode_code_point_start
unicode_code_point_end
sha256(exact_source_text)
相同快照重复组装必须得到相同 ID。span 以 Unicode code point 计数,不使用 UTF-16 code unit;
source_text 必须是保存 revision 的准确子串,不做 trim、翻译或换行归一化后再定位。
6.3 分段建议(待审批)
为兼顾准确引用和可复核性,建议登记:
- 完整 subject/body block;
- 非空行 block;
- 按受控标点形成的 clause block;
- Parser material 与 fallback 的精确 block;
- 对相同 source/revision/span/hash 去重。
分段只建立文本索引,不预判语义。若完整 request 超过 Provider 明确上限,preflight 失败;禁止删除 History、 缩短正文或通过摘要替代原文。
7. Request Builder 与 Preflight Validator
Request Builder 只接收已验证的内部 snapshot,不直接下载附件或查询 Provider。输出必须精确匹配
fixed-channel-parsing-agent-input-v1.0.schema.json 及配套 semantic rules。
Preflight 至少验证:
- channel/profile 精确配对和所有 contract/schema/profile/rule versions;
- Current/History source identity、revision、sequence、hash;
- ParserResult identity、status、facts/materials 和 attachment hash;
- evidence spans、exact text 与 ID 稳定性;
- fallback 只来自 Current 且在系统允许范围;
- target/fact/material/evidence 引用闭合;
- unknown fields、重复 IDs、超限和禁止数据;
- material optional target 的版本兼容策略。
Preflight 失败不得调用 Provider。
8. Provider-neutral Port 与 SuperAgent Adapter
建议 workflow Port:
FixedChannelParsingAgentPort
invoke(ValidatedParsingAgentRequest, InvocationContext)
-> ParsingAgentInvocationResult
Port 不暴露 SuperAgent session/SSE DTO、token 或 HTTP exception。InvocationContext 仅包含稳定幂等键、
deadline、获准版本和安全审计关联。
SuperAgent adapter:
- 使用
booking.parsing-agent.open-api.*独立配置; - 复用
SuperAgentOpenApiClientFactory和通用 session/SSE/run-status/recovery transport; - 使用专属 external app/token,不回退到旧 Recovery/Booking Business/global key;
- 将 request 序列化为单一 canonical JSON payload;
- 限制响应大小与 deadline,只接受完整 final/end + successful run;
- 返回 resolved Profile ID供本地强校验,并把actual published version写入运行审计;
- 不把 raw provider answer 写入普通日志或业务 artifact。
常规 CI 只用 fake/mock adapter;真实连接属于单独 release gate。
9. Response Validator
Server 不把 Python validator 作为运行时依赖。建议采用严格 Java DTO(unknown property fail)加显式语义 validator,并用同一 canonical fixture 与 Python offline oracle 做 parity。
2026-08-17 ADR-018 修订
严格 DTO decode 继续作为整份结构门槛;跨请求语义 Validator 改为逐项验收。整份返回只在 request/message/version/Parser refs/fallback refs 身份不一致时拒绝。身份正确后,只按项目检查引用身份、来源 和 Parser 权威;失败项目及其依赖项目被移除,其他结果继续进入 Merger。以下早期“任一失败拒绝整份”和 “每个 material 必须由 response Validator 恰好闭合”的口径不再适用。
当前必须验证:
- 顶层八组数组存在且无额外字段;
- 所有 result IDs 全局唯一;
- target、fact、material、evidence 引用均存在且类型正确;
source_text/source_label可由 evidence registry 还原;单片段精确匹配或多片段共同覆盖Current原文均可,sequence只承担展示顺序;- History 不能单独支持本次 candidate fact/relationship/mention/display;
- candidate fact 不覆盖 Parser 异值;有明确 conflict review 时只保留为复核材料,Merger仍保留Parser值;
- structured mention scope/target/quantity/source-room/evidence 合法;
- forbidden business/Trace/department/TaskCard/RateRoom/PMS 字段在任何层级都不存在;
- 已返回的 material disposition 引用身份与来源合法;缺少某项 disposition 不升级为整份失败;
- Agent 声明的 conflict/review 与 Parser facts/materials 一致;未知引用只拒绝受影响项目。
candidate 业务值类型与完整性不再由本层作为整份门槛,继续由 Layer 5/6按已识别业务处理。严格 DTO 自身 结构失败仍整份拒绝;逐项恢复不覆盖无法反序列化的 Provider JSON。
10. Deterministic Local Merger
Merger 输入仅为 immutable ParserResult、validated Agent result 和冻结的 completeness policy。
规则:
- Parser facts 原样进入
effective_facts[],保留来源与 rule ref; - Agent candidate 与同 fact key Parser fact 同值时按批准规则合并 provenance,不替换 Parser 值;
- 异值只保留 Parser fact并生成 conflict review;
- 没有 Parser fact时,只有 Current/Parser material/fallback evidence 合法且 target 唯一的候选可成为有效事实;
- History-only、非法 target、非法 role 或引用不足的候选不得进入 effective view;
- 已通过验收的 material disposition保持审计引用;缺少处置不再由本层把整份Agent结果判失败;
- required fact 完全缺失时由 merger/completeness policy 生成 review;
- 合法
structured_mentions[]、display、binding、relationship 保持中立,不转成 Trace、部门或业务类型; - 标准化排序、ID 和 review code 必须在重放中稳定。
10.1 最终结果拓扑(已实现)
权威八数组结果经本地merge后,确定性投影为latest Layer3ResultV2;以下中立内容均保留:
{
"effective_facts": [],
"structured_mentions": [],
"display_information": [],
"target_bindings": [],
"relationships": [],
"review_items": []
}
V2没有直接业务槽位的Agent target、fact authority、exact v1 target/material/review引用保存在
FIXED_CHANNEL_LAYER3_V2_AUDIT sidecar。不得把 mention 塞入十类 Parser fact,也不得丢弃合法
display/binding/relationship;不得在投影器生成business type、Trace、部门、TaskCard、Room或Rate。
11. Orchestration 与持久化
11.1 入口
- AgentBus:维持先 capture SourceMessage,再触发 Booking;Parser 后只 enqueue execution。
- 手工 EML:PostgreSQL 分支补齐 capture/bind Current SourceMessage,再进入同一 Parser/execution 路径。
- 两条入口不得因来源不同生成不同 request/evidence/merge 规则。
11.2 Execution/outbox
实施时以 server/src/main/resources/db/booking-postgresql/migration/ 的下一可用 Flyway 版本新增表,不能在
本 CR 预占固定编号。建议字段:
- execution id、hotel id、processing run id;
- source message id/revision、parser result artifact key;
- request hash、idempotency key、contract/profile versions;
- status、attempt、next attempt;
- lease owner/token、locked until、fencing version;
- provider session/run/resolved profile/version;
- response hash、safe failure code;
- created/updated/started/completed UTC timestamps。
领取、续租、完成、失败与重试使用 CAS/fencing 或等价单所有者语义。重复 SourceMessage/callback/replay 只能复用同一逻辑 execution,不产生双权威 artifact。
11.3 Artifact 与审计
- SourceMessage original store 继续唯一保存完整邮件正文和附件。
- Booking artifact 保存 public ParserResult、controlled fallback snapshot、normalized validated Agent result、 authoritative Layer 3 result。
- invocation audit 保存 refs/hashes/versions/status/failure code/provider metadata;不默认复制完整 request body 或 raw answer。
- 所有记录绑定 hotel + processing run + SourceMessage,沿用 processing-run retention 和访问边界。
12. Failure Policy 提案(待审批)
| Failure | 建议系统行为 | Parser facts | 自动业务处理 |
|---|---|---|---|
| Request internal invariant 失败 | run FAILED,记录安全 system code | 保留 artifact | 禁止 |
| Payload 超 Provider 限额 | 不调用;生成 blocker review/受控失败 | 保留 | 禁止 |
| Provider timeout/unavailable | 按稳定幂等键重试;耗尽后 blocker review | 保留 | 禁止 clean task |
| Invalid JSON/schema/forbidden field | 拒绝整份 result;blocker review | 保留 | 禁止 |
| Resolved profile/version mismatch | 契约失败,不 merge | 保留 | 禁止 |
| Parser FAILED,无 fallback | system failure/blocker review | 无 partial | 禁止 |
| Agent candidate 与 Parser 冲突 | Parser 值保留;生成 conflict review | 不变 | 仅人工风险路径 |
| material 未闭合/required fact 缺失 | 生成稳定 review item | 已确认 facts 保留 | 由 Layer 6 fail closed |
是否同时把 provider/contract failure 标记为 processing-run FAILED,或保留 run 并以 BLOCKER review 继续到
人工页面,需要在 CP0 确认。
13. Legacy 迁移与回滚
13.1 切换原则
- 新 v1 feature 默认 false,production 显式 false。
- v1 false:维持
parseLegacy()与当前旧链。 - v1 true:使用公共
parse()+ v1 execution/Agent/merger;旧 Field Recovery 强制 false。 - 不提供 legacy/v1 双写模式,不进行双外部 Agent 调用。
- 新固定渠道 Layer 3 result 直接投影latest
Layer3ResultV2并进入同run当前Layer4/5/6。compatibility projector只保留feature关闭/CP6前legacy代码,不再作为新路径权威下游。
13.2 回滚
关闭 v1 feature 即恢复 legacy 分支;不删除 execution、artifacts、audit 或历史 migration。未完成 execution 进入获准的 held/cancelled 状态,不能在关闭后继续外呼。具体状态名在 failure policy 审批后冻结。
13.3 独立退役
运行观察和 rollback 演练通过后,另开 checkpoint:先移除 runtime 调用,再逐步删除 parseLegacy()、
旧 Field Recovery、Layer3ContractsV2、FixedChannelParsingAgentContributionService 及专属测试。历史 migration
和审计数据永不因代码清理删除。
14. 安全与数据边界
- INTERNAL_ONLY,不新增外部入口或权限面。
- 所有查询、artifact、execution 和审计都绑定 hotel 与 processing run。
- Secret 只由部署 Secret 注入;仓库、测试、日志、异常、文档中无真实 key。
- 不外发 History attachments、附件 URL、数据库标识、PMS/Opera 数据或用户未授权上下文。
- 不保存隐藏推理;raw provider answer 默认不持久化。
- 日志使用稳定 ID/hash/failure code,不输出完整正文或 material raw content。
- Provider output 不能直接写 TaskCard、订单、PMS/Opera 或最终业务状态。
15. 实施 Checkpoints
- CP0 Contract Gate:技术架构、版本策略和失败矩阵已批准;business completeness catalog 与 release evidence 仍为放行Gate。
- CP1 Local Core:v1 DTO、History/evidence/request builder、validators、merger、fake Port 与 parity tests。
- CP2 Durable Execution:Booking PostgreSQL execution/outbox、claim/fencing/retry/audit 与 fake worker。
- CP3 SuperAgent Adapter:专属 config/wrapper/adapter,仅用 mocked transport 验收。
- CP4 Runtime Wiring:双入口 SourceMessage、公共 ParserResult、FAILED fallback、worker、merge、direct V2 projection和same-run continuation。
- CP5 Controlled Release:平台 Prompt/Skill/Profile/app 绑定证据和无 PII smoke;production 另行批准。
- CP6 Legacy Exit:观察期后独立删除旧 runtime 调用与契约。
每个 checkpoint 独立完成 focused tests、全量相关回归、security review 与 project-doc post-task gate。
16. 测试与验收
最低新增测试:
- Java DTO/schema canonical round-trip 和 unknown-field negatives;
- Python/Java fixture parity;
- 完整 History、无 History attachment、Unicode spans、稳定 IDs、超限不截断;
- request identity/version/fallback/ref preflight;
- response forbidden keys、exact source、History-only、Parser conflict、material closure;
- merger immutability、same/different value、deterministic replay、completeness、neutral structures;
- fake Port 与 mocked SuperAgent success/failure/recovery/profile mismatch;
- durable enqueue/claim/fencing/retry/restart/duplicate callback;
- Manual EML 与 AgentBus 同契约集成;
- legacy/v1 互斥与 rollback;
- Secret/PII/raw answer/attachment 不落日志和审计。
回归基线不得下降:QBD 114/4、LianTai 70/6、Parser 扩大样本 0 failures/errors、Agent 22/22、Python 50/50,以及后端 focused/full suite。
17. 预计文件归属
| 范围 | 预计归属 |
|---|---|
| v1 runtime DTO | workflows/reservation/common/dto/booking/layer3/v1 |
| Builder/Validator/Merger | workflows/reservation/booking/service 与 service.impl |
| Provider-neutral Port | workflows/reservation/booking/service |
| SourceMessage History query | platform/message 内部 repository/service |
| Execution persistence | workflows/reservation/booking/repository + Booking PostgreSQL migration |
| SuperAgent adapter | integrations/ai/superagent/adapter + 专属 properties/wrapper |
| Orchestration anchors | ReservationBookingEmailIntakeServiceImpl、AgentBusFrameProcessor、BookingContractAssembler、BookingPostgresMessageOrchestrator |
| Config | application*.yml 的 booking.parsing-agent.*;默认/production false |
| Tests | 对应 server unit/integration、canonical fixtures 与 Python package regression |
共享热点文件只有在对应 checkpoint 开始前重新检查 ownership/diff 后才修改。
18. CP0 Approval Checklist
- 接受带审计闭环的八数组
FixedChannelLayer3Resulttopology。 - optional material
target_ref采用“字段必有、值可空”的v1.0 pre-release schema纠正。 - 冻结 exact Agent call/no-call matrix。
- 冻结完整文本+行/句片段+附件材料的 evidence segmentation 与超限不截断行为。
- 冻结 History conversation/revision/order sidecar 规则。
- 冻结 failure → Parser-only blocker review / internal execution failed 映射。
- QBD/LianTai required-fact completeness catalog;通过本地policy注入,未配置时阻塞自动业务放行。
- 首版维持0个body-only或恰好1个匹配workbook,多匹配fail closed。
- CP5 前提供专属 Main Prompt/Skill/Profile/app/token 绑定证据。
上述技术项已经用户授权由Codex决定,CP1–CP4可以在默认关闭、fake/mock、无真实客资的条件下推进。 required-fact业务目录与CP5平台证据未关闭前,不得启用真实Provider或自动业务放行。
19. 当前隔离实现状态(2026-08-12)
已完成一个不依赖上述 open gates、且完全未接线的结果接收切片:
FixedChannelParsingAgentResultContracts镜像冻结 v1 result envelope,并实施纯结果内部不变量;FixedChannelParsingAgentResultDecoder使用严格 Jackson 反序列化,拒绝未知字段、尾随内容、重复 JSON key、 缺失必填字段及非法版本/引用形状;- canonical QBD/LianTai expected result 可严格 round-trip,负向测试覆盖禁止业务字段、重复 output/material disposition、scope/target、fallback ref 与 incomplete mention/review 闭环。
该切片没有 Spring 注册、workflow Port、Provider Adapter、request/evidence builder、跨输入 response validator、
Merger、配置、DDL 或编排接线,因此不改变现有 parseLegacy/旧 Recovery 运行行为,也不解除
HOLD/INTERNAL_ONLY。验证结果为专项 Java 10/10、相关 Java focused 34/34、Agent 21/21、Python 49/49。
后端全量 mvn test 共运行 693 tests,0 failures、6 errors、8 skipped;6 个 error 全部来自旧 v0.2
测试引用已删除的 Trace/schema/fixtures,作为兼容迁移项保留,未恢复过时资产。
20. CP0技术授权与nullable material target纠正(2026-08-12)
用户已明确委托Codex决定并推进技术方案;ADR-010技术Gate因此关闭,离线CP1–CP4获准在默认关闭、 fake/mock、无真实客资条件下实施。business required-fact catalog和CP5平台绑定仍是自动业务/真实Provider 放行Gate。
Parser material target_ref按已冻结业务/Java契约纠正为required-but-nullable;Parser fact target继续必须为
对象。该修正属于从未发布且持续HOLD的v1.0 schema表达纠错,不创建v1.1双轨,不修改Main Prompt。
Agent专项22/22、Python全套50/50通过;15成员包确定性重建和--check通过,当前SHA-256为
3ee9bbb90107078710958df15901c87cbea7be219ab6cb29540ab348e3f02ff2。本次hash更新来自canonical
evidence span发布前纠正;Main Prompt SHA、成员数量和HOLD状态不变。
21. CP1纯本地核心完成状态(2026-08-12)
默认关闭、无Spring/Provider/数据库接线的CP1核心已完成:
- v1 request/result/final Layer3强类型DTO与严格result decoder;
- 完整Current/History、Unicode code-point、稳定ID/hash的evidence registry和request builder;
- Provider调用前request preflight与返回后的跨输入semantic validator;
- 八数组
FixedChannelLayer3Result、Parser不可覆盖的deterministic merger和Parser-only failure结果; - required-fact policy端口;未配置时明确BLOCKER,禁止猜测酒店业务目录;
- provider-neutral Port、test-only fake和无运行态接线的local pipeline。
Java联合focused 59/59、Agent专项22/22、Python全套50/50通过。Profile平台ID/version白名单、持久execution、
真实SuperAgent adapter、主链接线与legacy迁移仍分别属于CP2–CP5;当前没有真实外部调用,发布继续
HOLD/INTERNAL_ONLY。
22. CP2持久Execution与Worker完成状态(2026-08-12)
默认不注册worker、不调用真实Provider的CP2离线核心已完成:
- Booking PostgreSQL V5定义durable execution、四类normalized artifact、lease、fencing、retry与终态约束;
- repository实施精确run/source/revision入队、幂等冲突核对、
SKIP LOCKED领取、过期接管、续租和CAS; - artifact必须为JSON object且hash匹配,同type只能幂等重放,不得用新payload覆盖旧快照;
- 终态前必须已有Parser和同hash Layer3 artifact;
SUCCEEDED额外要求validated Agent artifact; - 无Spring接线durable worker支持heartbeat、指数backoff、重试耗尽Parser-only review与崩溃后更高fence恢复;
- local handler从内部loader重建v1 request,重新核对identity/hash/bytes/History revisions/version,只保存 Parser/fallback、validated Agent result和authoritative Layer3,不保存raw answer。
timeout/unavailable进入持久重试;invalid JSON/schema/profile等可预期契约失败直接形成Parser-only
blocker;内部request/persistence invariant不发布权威Layer3。CP1+CP2 Java联合focused 83/83、Agent
22/22、Python 50/50通过。本checkpoint未连接真实PostgreSQL,未注册scheduler/SourceMessage
loader,未调用SuperAgent/AgentBus/PMS/Opera;runtime继续HOLD/INTERNAL_ONLY。
23. CP3专属SuperAgent Adapter完成状态(2026-08-12)
默认/production关闭、仅mocked transport验收的CP3已完成:
- 新增
booking.parsing-agent.*专属properties、独立API key与expected Profile ID栅栏;不回退旧 Recovery、Booking Business、Debug EML、AgentBus或global key; - 专属wrapper只复用
SuperAgentOpenApiClientFactory及既有session/SSE/run-status/recovery transport; - provider-neutral adapter发送完整AgentRequest JSON,使用hash subject与稳定request/idempotency identity, 有界限制request/message/response UTF-8 bytes并在独立executor中执行整体deadline;
- Trace被配置门禁强制关闭;实际resolved Profile ID必须与部署值精确一致,published version只作运行审计;
- payload oversize、invalid response和profile mismatch立即形成Parser-only终态review;timeout/unavailable由CP2 durable worker重试;executor拒绝fail fast,不回退入口/worker线程执行;
- Provider已返回但被本地栅栏拒绝时,只把response hash及安全session/run/Profile/model/token metadata交给 execution审计,不保存raw answer或完整request。
CP1–CP3与共享SuperAgent transport联合focused 119/119、Agent 22/22、Python 50/50通过。该历史checkpoint未
调用真实SuperAgent/AgentBus/PostgreSQL/PMS/Opera,未填写真实Profile/token,未注册scheduler、
SourceMessage loader、pipeline/worker bean或主链;booking.parsing-agent.enabled默认false且production
显式false。后续 CP4 已完成运行接线;business required-fact catalog和CP5平台绑定证据仍未完成,runtime继续
HOLD/INTERNAL_ONLY。
24. CP4内部运行链接线与验收状态(2026-08-12 历史checkpoint;下游边界已由第26节取代)
CP4 已完成并在 fake/mock、无真实外部调用边界内验收:
- 手工 EML 与 AgentBus 都先持久化/复用 SourceMessage,再以
source-message-inbox:<id>进入 Booking; 同一 SourceMessage 的重复 frame 使用相同 Booking 幂等键,changed duplicate 保留首份来源事实且不重放下游; - v1 固定渠道分支对恰好一个完整 Current workbook 调公共
parse();body-only 建零 ParserResult request; 不完整或多 workbook 调用前失败。该分支不调用parseLegacy()、旧 Recovery 或Layer3ContractsV2; - Source snapshot loader 读取 exact Current subject/body 与完整有序 History body,History 附件、URL、bytes 均不 进入 request/evidence;revision、Unicode span、hash 与机器读取审计闭合;
- public Parser artifact、execution enqueue 和 run Parser 状态同一 Booking PostgreSQL 事务;worker 的 normalized artifacts、execution completion、权威 Layer3、compatibility projection 与 Context 同一事务。内部失败同事务 标记 execution/run failed,不发布半成品;
- 权威
FIXED_CHANNEL_LAYER3_RESULT持久保留八数组,包括effective_facts[]、中立structured_mentions[]和review_items[];EFFECTIVE_PARSED_FACT_SET仅供现有 Context 兼容。BEFORE 和 中立结构只形成版本化 neutral hint,不能变成 Trace、部门、Rate Code、TaskCard 或 PMS 决定; - Booking PostgreSQL V6 扩展 runtime artifact allowlist;MySQL V30 保存 exact original subject。既有 V5 migration 未改写。v1/旧 Field Recovery 启动互斥;默认与 production 的 enabled/provider/worker 均为 false;
- 该历史CP4 checkpoint当时不调用 Layer 5 Business Agent:required-fact policy 未配置、有 review 或需要 Agent 的路径都停在 Context。第26节的direct V2 handoff已以同run continuation取代该下游边界。
验证:CP4 定向 Java 233 tests,0 failures/errors、7 skipped;排除两组明确属于 CP6 的旧 v0.2 测试后,
其余主流程 Java 782 tests,0 failures/errors、8 skipped。原始全量 789 tests 仍有 6 个 FileNotFound errors,
全部来自 FixedChannelParsingAgentContributionServiceTest 与 FixedChannelParsingAgentV02ContractTest 读取已删除
v0.2 schema/fixtures,CP4 新 failure 为 0。Agent 22/22、Python 50/50、Skill source/archive/manifest 严格校验通过。
CP4 不等于生产启用:真实 Provider/scheduler 未注册,未调用 AgentBus WebSocket、PMS 或 Opera。CP4 收口后,
用户另行批准的非生产 PostgreSQL Gate 已完成V1–V6 migration、幂等启动、restart/lease/fencing/concurrency
smoke;没有调用Provider,测试数据已清理。CP5 前仍须补齐专属 Main Prompt/Skill/Profile/app/token/API
exposure 绑定证据、无 PII 合成 smoke、MySQL V30真实migration smoke、required-fact 业务目录,以及 v1
terminal failure 的人工重放/告警runbook。CP6 之前不得删除
parseLegacy()、旧 Recovery、Layer3ContractsV2 或旧 contribution service。
25. CP4后PostgreSQL基础设施Gate(2026-08-12)
- 目标测试库经只读门禁确认为PostgreSQL 15.14 writable primary、非superuser角色和预期数据库/schema owner;
- 旧
schema_migration与仓库V001完全一致,八张旧业务表均为空;Flyway以version 0记录旧模型共存,不删除、 重命名或回填旧对象,随后成功应用V1–V6; - 两个独立Spring上下文验证进程重启后的过期lease接管:新owner由attempt/fence 1推进到2,旧owner续租和终态 写入均被拒绝;两个独立连接池并发claim同一execution时只有一个成功;
- 真实PgJDBC暴露
Instant无法直接绑定TIMESTAMPTZ的问题,repository统一以Timestamp写入,领域契约不变; - 正式opt-in PostgreSQL smoke 1/1、repository focused 7/7、当前主流程Java(排除两组CP6历史类)789项均 0 failures/errors(9 skipped);合成数据归零、旧业务表仍为空、无跨schema外键;
- 该Gate未授权或启动CP5 Provider/scheduler、CP6删除、MySQL、PMS或Opera。MySQL V30和告警/人工恢复runbook 仍是自动运行发布前置条件,但不阻塞第27节的受控测试平台绑定与合成契约冒烟。
26. CP4 V2 direct handoff 与 Parser FAILED fallback(2026-08-13)
在不改变ADR-010核心决策、冻结Agent Schema/Main Prompt/Skill或Parser契约的前提下,CP4主链补齐如下:
- 当前
@Primary BookingMessageOrchestratorV2Impl对已验证QBD/LianTai执行公共Parser,持久化ParserResult与 fallback snapshot,原子enqueue并把同一run标记AWAITING_PARSING_AGENT;入口随即返回,不执行Layer4–7; - worker本地严格校验/merge后,以
FixedChannelLayer3V2Projector直接生成latestLayer3ResultV2;targets、 bindings、relationships、neutral mentions、display、reviews、evidence、material dispositions完整保留,V2无槽位 的authority和exact v1审计保存FIXED_CHANNEL_LAYER3_V2_AUDIT; BookingV2Layer3Continuation以相同run执行当前Layer4/5/6并保存现有Layer7 confirmation projection边界; callback/终态重放不重复Parsing Agent或Layer5,不创建第二run;- expected Agent失败生成Parser-only blocker后仍同run fail closed;内部identity/persistence/downstream invariant 标记execution/run failed,不发布半成品或继续下游;
- Parser FAILED fallback只授权唯一Current
.xlsx且严格匹配source/revision/attachment/hash/MIME/size;最多 2 MiB、4 visible sheets、200 visible rows、800 visible scalar cells、512 code points/cell、20,000 total,任一超限 整体拒绝且不截断。公式、宏、链接、图片、注释、隐藏内容、URL-like scalar、损坏workbook、History附件、 bytes/Base64和外部下载全部拒绝;worker只读持久snapshot; - FAILED无fallback仍接收完整Current主题/正文并生成
PARSER_FAILED_NO_AUTHORIZED_FALLBACK;SUCCESS fallback、 identity不一致、未知evidence、重复/缺失material disposition、越界cell均fail closed; - AgentBus收到新固定渠道queued warning时抑制旧realtime dispatch;feature关闭、非固定渠道、未接管路径不变。
SOURCE_ROOM_NAME的raw值与workbook Evidence继续保留;normalized值必须来自Profile Parser已成功解析的sourceRoomType,V2 projector不得重新归一。无法确定标准房型时不发布该fact而进入material/review;Layer4 继续exact-only,不新增fuzzy、contains或空格/连字符等价,也不改Roomtype authority/catalog。
补充E2E覆盖QBD与普通LianTai:ONE BEDROOM SUITE DBL与直接ONE-BEDROOM-SUITE-DBL均在Layer3/V2保留
标准normalized值并由Layer4解析RM2,原文/Evidence可审计,Rate/早餐结果一致;Q10、Garden、Pool及未知label
回归通过(QBD均为GRPA1/含早/BUALUANG,普通LianTai均为LBLT/不含早)。最终本地fake/mock focused为
149 tests(142 executed、7 real-sample skipped、0 failures/errors)。全量后端902
tests、1 failure、0 errors、9 skipped;唯一failure为范围外并行V4 controller用例
ReservationV4CommandControllerTest.shouldResolveRoomInformationReviewWhenDisplayPayloadAlreadyUsesStableModel
(expected 200、actual 400),未在本专项修改。未调用真实Provider、AgentBus WebSocket、真实数据库、PMS或Opera。
默认和production的Parsing Agent/provider/worker仍false;CP5、CP6、frontend与外部写入继续HOLD。
27. CP5 测试 SuperAgent 绑定与真实契约冒烟(2026-08-14)
用户明确授权调用测试环境 AgentBus/SuperAgent、禁止调用 PMS/Opera 后,CP5 在“测试平台绑定+受控合成 Provider 调用”边界内完成。AgentBus 是入站消息入口,SuperAgent 是异步 Provider;二者不是同一个调用, 本次没有启动 AgentBus WebSocket 或部署自动 worker。
27.1 平台绑定证据
按 ADR-005 使用两个互不共享 Secret 的 external app,公开 Open Agent API 仍由 token 绑定 Profile:
| Agent | Profile ID | 已发布版本 ID | 模型 | 唯一启用 Skill | Main Prompt trimmed SHA-256 |
|---|---|---|---|---|---|
| Booking Business Agent | 85ab8334-4e1c-4716-8ec0-9c3c099cec9b |
9fed48c0-1f53-4d5a-8ba0-52865c738d83(v7) |
deepseek-v4-pro |
booking-desk-event |
a54a0c12dc2a815af04f970999101f474913c21aafff72c3d1d8d5ead5cdc47f |
| Fixed-channel Parsing Agent | ea56cb01-72f0-4ef2-9a73-40cfae1abcd4 |
8b30ebe9-180c-433b-89cf-9c59933b618a(v8) |
deepseek-v4-pro |
fixed-channel-core-parsing-agent |
b59891f4cbd043a35c0ed76ba57d5d733a6d6816e6a2455b899514c568279e2 |
两份平台 Prompt 与仓库独立 Main Prompt 在去除平台归一化的尾部空白后逐字一致;Main Prompt 仍未打入
.skill 包。两个 Profile 均通过平台发布检查 11/11,API 与 stream 开启,MCP、memory、Profile calls 和
公开 Trace 均关闭,最大并发为 2。平台 ID 可进入非敏感配置,external app Secret 不写入仓库、文档或日志。
27.2 真实 Provider 契约结果
- Booking:Java opt-in smoke通过1/1,耗时52.782秒;真实返回精确命中上述Profile/v7,经过当前
BookingBusinessAgentInputV1投影、严格CandidateDecisionV2 decoder和Layer6 validator,canonical-new-payment合成样本包含合法NEW_BOOKINGtarget。另一次直接transport smoke以general语义得到 evidence-closed的GENERAL_NOTIFICATION。 - Parsing:Java opt-in smoke 通过 1/1,耗时 202.146 秒;真实返回精确命中上述 Profile/v8,使用 LianTai canonical 合成 fixture,经过当前 adapter、deadline、严格 decoder 与 response validator,完整答案超过 2,000 字符且契约校验通过。
- 真实 Parsing 调用暴露平台公共
message.final约 2,000 字符上限:同一 SSE 中较早、finish_reason=stop的 assistant message 含完整 JSON,而message.final是其严格前缀。共享 SSE parser 已收紧为:只有 core final 是当前完整 stop 内容的严格前缀时才保留完整内容;不同内容的显式 core final 仍保持权威。Parsing 默认整体等待上限据实由 120 秒提高为 240 秒。
27.3 本地配置、验证与未放行边界
- 默认配置已锁定两个已验证 Profile/version;所有 enabled/provider/worker 开关仍为
false,production 继续硬关闭。部署 Secret 未写入任何配置文件。 - SuperAgent transport/config/adapter focused:53 tests,0 failures、0 errors、2 个真实测试默认 skip。
- 后端全量稳定复跑:953 tests,1 failure、0 errors、11 skipped。唯一失败是并行 V4 范围外既有用例
ReservationV4CommandControllerTest.shouldResolveRoomInformationReviewWhenDisplayPayloadAlreadyUsesStableModel(expected 200、actual 400),不经过本次 CP5 代码。 - 本次没有连接 AgentBus WebSocket、没有部署或重启应用 worker、没有执行数据库 migration/lease smoke, 没有调用 PMS/Opera,也没有开始 CP6 删除。
因此,CP5 的测试平台身份、Prompt/Skill/Profile/version 绑定及两条真实 Provider 契约调用已经闭环;要形成 自动运行发布,仍须在指定非生产部署中注入独立 Secret、重启并启用选定 worker,执行完整 AgentBus→SourceMessage→PostgreSQL execution→两 Agent→Layer 6 smoke,补齐监控/告警/人工重放手册和所需 required-fact 业务目录。若部署仍走 MySQL 主路径,还需完成 V30 migration 验证。production、V2→V4 authoritative writer、PMS/Opera 与 CP6 均需单独批准。
28. 公开 Trace 主线修订(2026-08-17)
M012 Processing Run全生命周期日志已确认要求当前fixed-channel Parsing Agent调用携带
include_trace=true。booking.parsing-agent.open-api.include-trace现默认true,显式false由properties校验
在Provider调用前fail closed;第23节“Trace强制关闭”和第27.1节“测试平台公开Trace关闭”仅保留为当时
checkpoint/平台状态,不再表示当前信息系统调用契约。legacy Field Recovery的no-Trace兼容边界不变。
Trace模式只有公开run.completed(status=success)和顶层end同时存在才成功;core message.final只提供
进程内最终JSON,不能替代完成证据。安全public_trace_events通过既有adapter进入Parsing execution audit/
回放,可保留reasoning.summary等公开摘要;message.delta/message.final文本不写可持久Trace,URL、Secret、
Authorization、Cookie与CSRF统一脱敏并限长,raw answer与完整request继续不保存。
属性/SSE/安全投影/两条业务主链37项与共享client loopback 4项聚焦测试全部通过。本修订未调用真实SuperAgent、 数据库、AgentBus WebSocket、PMS/Opera,未开启Parsing Agent/provider/worker或production开关;平台能力启用和 目标环境live smoke仍是部署门禁。