Files
LWLT-AIBOT/archive/project-history/2026-08-28/findings-pre-compression-shared-plan-visitor-export.md
T

205 lines
31 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 当前关键发现
## 2026-08-28 — 名单容量提示(已完成)
- 15:44 日志证明独立团 25 人只物化 16 位,保存前阻断;其余缺行/投影码均为连锁证据。
- `0.5.156` 将两类行数码映射为 `erp_passenger_count_limit_exceeded`,主提示含 25/16 和对象类型,原码只留技术详情。
- 仍为 `no_erp_write=true`;未重试历史任务、访问 ERP、重载或重启。
## 2026-08-28 — 名单确认覆盖必写与明确成功终结(已完成)
- 两次真实运行都已取得父表单 ERP 明确成功响应;ERP 最终 25 行及领队联系人也被独立只读证据确认正确,但 raw HTML 与 hydrated 页面逐行比较先后产生假阴性,说明写后逐行读取不适合作为名单成功门禁。
- 业务负责人确认:`full_replace + confirmed=true` 就是明确写入授权,插件不得因 ERP 当前值与附件相同而生成 `passenger_import_no_changes`;所有附件指定序号都必须进入原生覆写集合。
- 未确认时,任一目标序号已占用(包括同值)仍要求覆盖确认;确认后继续执行游客与领队完整写前投影,父表单 ERP 明确返回成功即完成,不再写后逐行回查或自动对账。
- 该例外只属于 `passenger_list_import`。其他生命周期 action 仍必须完成写后回查;名单没有取得明确成功响应时仍不宣称成功、不自动重提。
- 扩展和平台最低版本推进到 `0.5.155`;历史任务不修改、不回查、不重试,运行态重载仍需用户另行授权。
## 2026-08-28 — 名单领队联系人严格来源与写入边界(已完成)
- 真实模板只读结构核验确认:第一行是团信息,第二行是完整 14 列表头,共 25 条数据;恰好一行`备注`严格为`领队`且该行姓名、电话齐全。核验未输出或归档个人值。
- 联系人来源必须与正文`data.leader`分离:正文领队仍是查单/候选补充事实;只有 canonical TSV 中唯一严格`领队`行才生成嵌套 `passenger_list.leader_contact={sequence,name,phone}`。
- 解析、Schema、平台和扩展都独立核对 leader_contact 与 TSV 的序号、姓名、电话和备注关系。无标记却携带结构、多标记、缺值、篡改或超长值均在浏览器访问/保存前阻断。
- ERP 目标控件是 `jj_lianxiren`(联系人/领队人)和 `jj_dianhua`(电话)。`sj_lianxiren/sj_dianhua` 属于接送联系人保护字段,只快照恢复,不接受本次名单领队投影。
- 原生 `DaoRuDones` 可能改变父表单,因此适配器在调用前冻结四字段,游客行合并后先恢复全部快照,再按存在的 leader_contact 覆盖两个目标控件;无标记时四字段保持原状。
- 保存前要求目标两字段和全部游客行精确投影;失败时恢复父表单和游客行。保存后 fresh GET 只回传姓名/电话的脱敏哈希匹配事实,不记录明文。
- 该阶段版本为工作簿规范化器 `v1.1.0`、Program parser `v1.0.5`、生命周期契约 `v2.9`、扩展 `0.5.152`、五 Skill `0.5.124`、运营 DOCX `0.5.122`。8786 已在用户授权下重启并加载当时控制面源码;后续真实运行已证明名单与领队联系人保存成功,当前扩展由下一节推进至 `0.5.153`。
## 2026-08-28 — 名单确认覆盖行英文名写前纠正(已完成)
- 用户提供的两次平台时间线证明手工附件上传已生效:同一 `.xls` 均被接受并规范化为 25 行,只走 Program;第一次按设计在第 1、2 行覆盖确认处停止,第二次确认覆盖后到达 ERP 原生解析,但在父表单保存前以 `passenger_native_projection_mismatch:1.english_name,2.english_name` 停止,两次均明确 `no_erp_write=true`。
- 只读核对工作簿哈希与运行记录一致;前 24 个英文名均为 ASCII 逗号加空格,第 25 个全角逗号会被生产规范化器转换。因此第 1、2 行不是源格式特例;失败恰好对应原来已占用的覆盖目标行。
- 原生解析失败后控件已恢复,无法再直接读取瞬时旧值;结合失败范围,最强解释是 `DaoRuDones` 覆盖已占用行时没有可靠刷新 `pinyinxm`。实现按防御性方式修复,不把推断冒充 ERP 保存证据。
- `0.5.151` 在原生解析后只遍历 `merge.changed_sequences`:把 canonical `NAME` 按原生规则去空白后写回该行英文名控件;既有电话纠正、未变更行快照恢复、完整写前投影、明确响应和保存后 fresh requery 全部保留。
- 平台最低扩展版本、mapping、风险登记、release gate 和缓存键已同步;旧 `0.5.150` ZIP 归档,新 ZIP SHA-256 为 `51529ca531f1767b4938292c1f8a637f510efa5df5d28d386711854c5f56495f`。
- 定向 lifecycle 52/52;规定全量门禁为仓库治理 9/9、控制面 121/121、legacy 244/244、TypeScript 和 build 全绿。当前源码尚未重载到 Chrome,也没有重试真实任务或触发 ERP 保存。
- 先前 AgentBus OSS 地址被 DNS 私网/保留地址判定拒绝是另一条下载边界问题;本轮平台手工附件成功不等于该 AgentBus 网络问题已修复。
## 2026-08-27 — 运营指令表示例合并与精简(已完成)
- 桌面 DOCX 是较旧契约上的运营改稿:示例值和删减方向有效,但其中两项名单仍为正文 TSV,不能反向覆盖已完成的 Excel 附件等待与 Program-only 契约。
- 18 项示例已按桌面版更新;散拼子单补回当前必填的`人数:15+1`,两项名单改为相同定位信息加 Excel 附件,`LLW-261101A-A` 按用户确认保留。
- 运营表已移除 `before_snapshot`、内部字段、AI 模式名、OSS、内部 action/映射和回查实现等释义;这些约束仍保留在 Skill、release gate、控制面说明和代码中。
- 当前发布基线为扩展 `0.5.150`、五 Skill `0.5.123`、运营 DOCX `0.5.121`。新版由活动 Markdown 单一源生成,共 12 页,逐页检查无字体或布局缺陷。
- 仓库治理 9/9、TypeScript、控制面 121/121、legacy 244/244、build 和 diff 全绿;运行态、ERP 与外部渠道均未改变。
## 2026-08-27 — 名单 Excel 附件 Program-only 改造(已完成)
- 用户明确两类名单业务不走 AI,只走 Program parser;功能范围不包含 AI Prompt、AI parser、Shadow 或 Auto 附件解析。
- 当前 `business_parser_settings` 默认 AI 且允许四模式,名单 route 没有硬性 program-only 约束;全局紧急 AI 回退也会覆盖全部 route。实现必须在 route、设置和任务快照边界固定两类名单为 Program,不能只依赖当前数据库配置。
- 样例为旧版二进制 WPS `.xls`,单 Sheet `A1:N27`:标题/航班元数据行、14 列表头、25 条名单。年龄与有效期含公式,日期同时有文本与序列值,电话可能是数值,英文姓名出现全角逗号;解析必须按数据处理并转换为 canonical 13 列。
- 14→13 的核心转换为 `英文姓名→NAME`、`护照号码→证件号码`、自动补 `证件类型=护照`、`签发日期→签发日`;年龄忽略。非空身份证号码当前无护照名单目标,必须失败关闭或进入人工确认,不能静默丢弃。
- 当前手工/API 只有文本;AgentBus 类型虽有 `attachments`,处理函数忽略它且附件-only 帧被拒绝。当前 `task_artifacts` 强制 execution-bound,只适合 ERP 输出;OSS 上传为 `public-read`,不能保存护照名单输入。
- 当前 Chrome 路由读取页面现有游客行数作为 `expected_passenger_count`,operation plan 与 `planPassengerMerge()` 都拒绝行数/序号超过该值。样例 25 人用于默认 16 行独立团会被错误阻断,故需把“当前行数”改为合并基线而非业务上限,并以 native import 后实际生成/保存行 fresh requery 为准。
- 既有 partial merge、占用行覆盖确认、未指定行恢复和 canonical TSV 复用价值仍成立;动态扩展必须保留这些保护,不能直接把原始 Excel 交给 `DaoRuDones`。
- 控制面已有 AES-256-GCM `encryptBytes/decryptBytes`,但名单解析完成前只需要内存中的原始工作簿和数据库中的加密 canonical TSV;按数据最小化原则无需持久化原始文件字节。新输入附件表可仅保存 hash/类型/大小、脱敏校验状态和加密规范文本,失败文件只留元数据。
- Fastify body limit 已按 `ARTIFACT_MAX_BYTES` 放大,手工页面可沿用 JSON base64 上传而无需再引入 multipart;服务端仍必须严格解码、核对声明大小/hash,并限制一个名单文件。
- 初始 `agent_session_messages` 可以在任务等待附件期间保持 `queued`;附件到齐后只需原子解锁任务为 `parse_queued`。附件-only 续接不应伪造新的用户正文,claim 时从加密输入附件表读取 canonical TSV 并仅拼给 Program parser。
- 为避免多个 queued turn 的顺序歧义,`awaiting_attachment` 阶段只接受附件续接;普通文本补充仍提示先发文件。Program 真正运行后如缺订单定位字段,再使用现有 `awaiting_user_input` 文本会话。
- AgentBus 入站附件预计沿用 `payload.attachments[]` 的 `name/content_type/size/url/sha256` 形态;下载必须 HTTPS、限制重定向/大小、校验 hash,并拒绝本机、私网和保留地址。附件-only 帧须有显式 task_id 或同渠道同会话唯一 waiting task。
- 当前实现已把上述约束落到迁移 014、手工/API、AgentBus、TaskService 和解析 claim:原始工作簿只在内存中存在;数据库只保存附件元数据、校验状态、加密 canonical TSV,解析完成或终止后立即清除规范文本。
- 两个名单 route 的任务快照、设置 mutation、紧急 AI 回退和一次性重解析均受机器注册表的 `program_only` 策略约束;非名单 route 保持原四模式行为。
- Chrome 端以 `max(页面当前游客行数, 附件最高序号)` 扩行并保留未指定行、覆盖确认与 fresh requery;16/31 只保留为独立团/散拼子单初始基线,5000 是唯一行数技术上限。
- 真实模板只读验证结果为表头第 2 行、25 条数据、规范化 13 列;没有把文件名、单元格值或工作簿字节写入活动仓库、日志、fixture 或发布物。
- 名单链路发布时基线为运营 DOCX `0.5.120`;当前运营 DOCX 已由后续示例合并与精简任务推进到 `0.5.121`。运行态迁移、扩展重载与真实 ERP 保存仍需另行授权。
## 2026-08-27 — 历史任务手动与批量删除(已完成)
- 修改前已有 `DELETE /api/tasks/:taskId`、`TaskService.hardDeleteTask()` 和详情区删除按钮,但 `/history` 卡片没有行级删除、复选框或批量服务端契约。
- 新增 `POST /api/tasks/bulk-delete`,请求为 1–100 个不重复 `task_ids`。服务层在一个事务中按组织和稳定顺序锁定全部目标;任一任务缺失(包括其他组织的不可见目标)即返回 `task_not_found` 并整批回滚。
- 单删复用批量事务核心。FK 子记录级联删除,task-scoped `audit_events` 与 `outbox_events` 同事务显式清理;删除前冻结关联附件元数据,提交后通过现有 `TaskArtifactStore.cleanup()` 清理 OSS 对象。
- 历史页每张卡片增加复选框和独立删除按钮;工具条支持“选择本页”和删除所选。筛选、重置和翻页清空选择,服务端刷新裁掉当前页外选择。
- 单删和批删共享二次确认。若任务已确认或进入插件流程,会显示涉及数量并声明插件停止只是尽力而为、已经发生的 ERP 写入不会撤回;删除期间相关控件统一锁定。
- 删除成功后清理列表、运行态、详情、overlay 和回执队列等本地缓存,并用当前页面会话 tombstone 阻止在途旧同步短暂恢复已删卡片,再刷新服务端权威分页。
- 并行名单附件 WIP 写入前,仓库治理 9/9、TypeScript、页面语法、历史删除定向回归、完整控制面 99/99、build 和相关 diff 通过;其后历史删除定向复跑仍通过。当前全局门禁另受名单 WIP 的缺失 workbook 源文件、两项动态游客行红灯及扩展源码/ZIP 暂时不同步影响,均不属于删除回归。
- 用户随后明确授权重启;新服务 PID 29562 已成为 8786 唯一监听者,数据库、Schema、迁移 014 和 4/4 AgentBus 渠道均 ready。仅以未认证随机假 ID 探测删除路由,返回 401 而非 404;未删除真实数据、未读取 `.env` 内容、未部署。
## 2026-08-27 — AgentBus 渠道配置删除(已完成)
- 原渠道目录只有创建、启停、改名和 key 轮换,没有删除 API 或 UI;数据库迁移已经预先定义了硬删除语义:`tasks.channel_id ON DELETE SET NULL` 保留历史任务,`agentbus_deliveries.channel_id ON DELETE CASCADE` 清理该渠道持久化回执,加密 key 随 `user_channels` 行删除。
- `AgentBusChannelService.delete()` 现在在组织范围事务内锁定目标、验证存在性、记录 `agentbus_channel.deleted` 审计(含关联任务数和移除回执数),再删除配置;其他组织的 UUID 与不存在目标统一返回 `channel_not_found`。
- `DELETE /api/channels/:channelId` 使用现有管理员 same-origin、会话和 CSRF mutation 门禁;事务成功后由 manager reload 停止旧 listener 并只为仍启用渠道重建连接。
- 旧 `reload()` 会把并发期间的新 reload 请求直接合并到旧 Promise,理论上可能以旧渠道快照结束。现在 manager 用 `reloadRequested` 循环完整重放并发 mutation,单测证明在途 reload 期间追加请求会执行第二次目录读取。
- 完整旧环境变量仍存在时,`ensureLegacyChannel()` 会自动重建 `legacy-env`。公开渠道模型因此增加 `deletable`;API 对仍由环境托管的兼容渠道返回 `channel_managed_by_environment`,页面显示禁用的“环境托管”按钮。移除环境配置并重启后,遗留数据库行可正常删除。
- 页面删除前明确二次确认:连接停止、服务端 key 与该渠道全部持久化回执记录(包括未发送回执)移除、历史任务保留、操作不可撤销;成功后本地目录立即移除该行,脚本缓存键更新为 `20260827-agentbus-channel-delete-1`。
- 定向 61/61、TypeScript、页面语法、完整控制面 99/99 与 build 通过。仓库治理 3 个红灯均来自暂挂人数发布链尚未同步的 `0.5.119` DOCX、扩展源码 0.5.149/清单 0.5.148 和 Skill 源/0.5.121 包;本次未触碰该发布收敛工作。
- 本轮没有读取 `.env`、调用真实渠道 API、删除配置、重启或部署。
## 2026-08-27 — 独立团人数分类解析修复(已完成)
- 根因是 Program parser 把报告值归一化为 `8+1占+1不占+1` 后,四段前置校验仍要求全为纯数字;同时 lifecycle 可执行映射漏了已有标准 target `pax.child_no_bed`。
- 报告输入现精确生成成人 8、占床儿童 1、不占床儿童 1、领队 1 四个 action。标签倒序按标签归类;旧三段和旧四/五段纯位置格式保持兼容。
- 双标签格式只允许中间两段恰好各有一次“占/不占”;重复或半标注、坏分隔符、负数/小数、超安全整数和全零继续 `program_invalid_value`,不 Auto fallback、不生成 operation、不派发插件或写 ERP。
- 只写用户能确定的类别;报告四段不生成 `pax.infant=0`。需要清零必须明确写“婴儿改为0”,该显式 target 仍按现有宽修改能力进入人工复核。
- ERP 活动字段由 Schema/new-order 路径确认是 `ertrenshu`。operation plan、平台能力目录和 lifecycle adapter 已加入 `pax.child_no_bed → ertrenshu`,同一表驱动覆盖写前快照、非负校验、原生表单设值和 fresh requery;Schema 结构不变。
- 业务登记、Prompt、更新 Skill/契约、运营模板、mapping、扩展说明和 release gate 已统一为成人/占床儿童/不占床儿童/领队四类,并继续标记 SGL/TWN 与四类人数待授权 ERP 实写复测。
- 当前版本为 Program `v1.0.4`、Prompt `v1.8-independent-headcount-categories`、扩展 `0.5.149`、五 Skill `0.5.122`、运营 DOCX `0.5.119`;发布清单已登记当前制品和哈希,旧制品日期化归档。
- DOCX 已按 Documents 工作流重建并检查全部 15 页;五个 Skill 通过官方 validator,ZIP/Skill 包与源码逐文件一致。规定门禁最终为仓库治理 9/9、TypeScript、控制面 117/117、legacy 244/244 和 build 全绿。
- 未修改或重试报告任务,未调用 AI、派发插件、访问/写入 ERP、重载扩展、重启服务、部署或外发;运行态加载仍需用户另行授权。
## 2026-08-27 — 09:32 下单错误已定位并修复为严格双哈希门禁
- `TASK-20260827013256-D06X1n4` 为 AgentBus、`team_order_create`、Program revision 3 / v1.0.3、automatic;解析和客户/产品/人员唯一匹配均通过。
- 页内 `liveSubmitApproved()` 在网络前比较受保护字段指纹时阻断:`current protected business fields do not match the approved preflight`。结果明确记录 `submit_safety.live_submit_attempted=false`、`native_request=null`、`server_response=null`、`requery=null`、`side_effects=[]`;没有向 ERP 发出本次保存请求。
- Chrome 扩展后台的原始证据进一步确定了时间边界:预检调用前表单 protected hash 与被拦截的原生请求 protected hash 都是 `5f3d…`;`SubmitInfoForm()` 返回后的当前表单则是 `a5f4…`,字段数仍为 822。说明 ERP 原生函数在生成请求时同步规范化了浏览器表单;旧代码只保存调用前 form hash,随后错误地拿它校验调用后 form。
- `0.5.148` 保留两套互不替代的批准证据:原生函数返回后的 post-intercept form hash 用于正式动作前的当前表单校验,被拦截的 native request hash 用于正式 `DoInfoJH` Ajax 放行校验。两处任一漂移仍在网络前阻断,没有降低哈希强度。
- 独立的状态分类缺陷也已修复:页内结果现在明确记录 `network_request_attempted`;只有实际调用原生 Ajax 才进入写边界。后台对经过严格证据函数确认的网络前阻断回退为 blocked/no-write,未知或断连仍保持 uncertain。
- 控制面只允许在“既有结果与纠正结果均含同一零网络页内证据、执行编号/连接一致、attempt 仍待回查”的条件下把 reconciliation 收敛为 no-write。报告任务已通过该门禁变为 `blocked / prewrite_blocked / write_attempted=false / no_erp_write=true / queue_released=true`,并同步纠正扩展本地副本;没有自动重试或 ERP 写入。
- 当前源码/发布基线为扩展 `0.5.148`;运行中的 Chrome 仍是 `0.5.147`,未获单独重载授权,因此新逻辑尚未进入浏览器运行态。
## 2026-08-27 — 全自动化按钮陈旧显示已修复
- 最新 AgentBus 任务 `TASK-20260827011515-VRWFVAc` 是 `team_order_create / Program / Program`;解析事件固定记录 `automation_enabled=true`、`confirmation_mode=automatic`,任务随后完成写入与回查。数据库组织开关当前也是 true。
- 因而本次不是 AgentBus 绕过门禁:执行端读取了数据库权威值。页面按钮显示“关闭”来自旧标签页的本地状态;此前开关由受控后台方法改变并重启服务,而页面只在登录/整页加载时读取设置,EventSource 自动重连和既有 30 秒刷新均未同步该值。
- `syncAutomationSettings()` 现合并并发读取,并与用户 PUT 切换串行;EventSource `open`、30 秒后台刷新、页面重新可见和窗口聚焦都会重新读取 `/api/settings/automation`。解析策略页的自动化提示也随同重绘。
- 页面缓存键更新为 `app.js?v=20260827-automation-state-sync-1`。8786 的静态服务已直接提供新版 HTML/JS,无需服务重启;已打开的旧页面仍需刷新一次。
- 仓库治理 9/9、TypeScript、控制面 96/96、legacy、build、diff、运行态 ready 和已提供脚本检查全部通过。本轮没有修改组织开关、解析策略或任务,没有重启、调用 AI、派发插件或访问 ERP。
## 2026-08-27 — 微信信封修复已加载,全自动化已开启
- 用户对“重启 8786”和“开启组织全自动化”两项均明确授权。切换前只读确认 `automation_enabled=false`,且没有 parse/ERP 在途任务。
- 已通过 `TaskService.setAutomationEnabled()` 的同一事务方法把开关设为 true,并写入 `organization.automation_enabled` 审计;未直接绕过控制面审计语义。
- 已优雅停止旧服务 PID `76113`,用标准 `pnpm run dev` 启动 PID `84022`。8786 只有一个监听,cwd 为项目根目录;数据库、Schema、迁移 013 与 4/4 AgentBus 渠道 connected/session ready。
- 运行态复核:组织全自动化为 true,18/18 parser route 均为 Program revision 3。未来合法的新手工或 AgentBus 任务会共用 Program 与自动确认安全门禁。
- 报告任务仍保持 `awaiting_confirmation / manual / parser AI` 且未确认;本轮没有重解析、确认、派发、AI 调用或 ERP 访问/写入。
## 2026-08-27 — AgentBus 微信信封 AI 回退已修复(源码)
- 用户提供的新任务日志证实 AI 在重启后仍被调用。只读定位到 `TASK-20260827004712-_PGgTzg`:任务来源为 AgentBus,但快照为 `business_route_id=null`、`parser_mode=ai`、revision 0、AI affinity;parse decision 同样记录 route null/configured AI。与此同时数据库 18/18 route 均仍是 Program revision 3,因此不是策略被切回 AI。
- 加密原文的脱敏结构是 `New WeChat message`、`Conversation:`、`Text: <业务指令>`,后接当前登记字段。旧 resolver 对完整信封 unresolved,因为 `Conversation` / `Text` 不是业务标签;任务在快照阶段按兼容策略安全固化为 AI。
- 146 条 AgentBus 任务的只读聚合中,144 条使用这一严格微信信封,修复前 146/146 unresolved;按已证实信封解包后 142 条命中登记 route、4 条继续 unresolved。没有输出或归档原文值。
- 新 `extractAgentBusBusinessText()` 位于 AgentBus source adapter:仅当首行精确为 `New WeChat message`、第二行非空 `Conversation:`、第三行 `Text:` 时,才把 `Text:` 同行值与后续行交给 TaskService。近似、缺字段或空正文保持规范化后的原包装。
- 不把传输标签注册为业务字段,也不放宽 Program 对未知语法的失败关闭。解包正文仍使用同一 route resolver、任务级模式快照、parser orchestrator 和 operation validator。
- 报告任务原文用新代码只读离线重放:信封成功解包、route exact=`team_order_create`、Program v1.0.3=`agent_parse_passed`、action=`team_order_create`、无 fallback。
- 定向 AgentBus/parser 33/33、仓库治理 9/9、TypeScript、完整控制面 96/96、legacy 全量、build 与 diff 均通过。适配器随后已在用户授权重启后进入运行态。
- 没有重试/修改报告任务,没有创建、确认、派发任务,没有调用 AI、访问/写入 ERP、切换解析模式或修改组织自动化开关;未读取 `.env` 内容。
## 2026-08-27 — 8786 已加载全局解析与自动化修复
- 用户明确授权“重启项目”;结合上轮交付边界,本轮授权目标精确为正式控制面 `127.0.0.1:8786`,未停止独立 8765 解析适配器或其他本机服务。
- 重启前旧服务 PID `41546`、启动器 PID `41533`,使用标准 `pnpm run dev`;`/health/live` 与 `/health/ready` 均正常,数据库、Schema、迁移 013 和 4 个 AgentBus 会话 ready。
- 已向旧服务发送 TERM,并确认端口释放及旧进程树退出;随后以相同标准入口启动。新服务 PID `76113`、启动器 PID `76096`,只有一个 8786 监听,进程 cwd 为 `/Users/inmanx/Documents/lwltAPI`。
- 新实例 `/health/ready` 返回 `ok=true`,数据库与 Schema ready,必需迁移为 `013_business_parser_modes`,4/4 AgentBus 渠道 connected 且 session ready。
- 正式页面已实际提供 cache key `app.js?v=20260826-global-parser-automation-1`;获取到的脚本包含“所有来源的新任务解析通过后”文案,证明本次全局解析/自动化源码已由运行服务加载。
- 重启记录同步后,仓库治理 9/9、TypeScript、控制面 95/95、legacy 全量、build 与 `git diff --check` 均通过。首次并行门禁留下一个无输出的 AgentBus 测试子进程,已终止并用 AgentBus 11/11、控制面串行 95/95 明确复证;不属于运行服务故障。
- 本轮只执行受控重启和只读健康检查;没有读取 `.env` 内容,没有创建/确认/重试任务、调用 AI、派发插件、访问/写入 ERP、修改 route 模式或组织全自动化开关。
## 2026-08-26 — 解析策略与全自动化全局生效(已完成)
### 已证实的根因
- 用户观察到手工输入会遵循解析策略,而 AgentBus 仍走 AI。调查必须拆成两层:route/mode 快照,以及解析通过后的自动确认/执行。
- ParserOrchestrator.parse() 本身不检查任务来源,只读取任务快照中的 route_id、configured_mode 和 engine_affinity;AI / Shadow / Auto / Program 四模式没有 AgentBus 专用旁路。
- createTask() 与 ingestMessage() 创建新任务时都调用同一个 resolveParserModeSnapshot(),写入同一组 parser 字段;AgentBus listener 也把原样 payload.text、配置组织 ID 和 source=agentbus 交给同一 TaskService 与 parse queue。已排除 AgentBus INSERT 或 listener 直接硬编码 AI。
- 实际来源偏差发生在快照之前:旧 resolver 只看原始文本首个非空行。未识别就固化为 route_id=null / mode=ai / engine_affinity=ai。手工模板首行通常是当前指令;历史 AgentBus 文本 143/143 没有当前指令行、141 条带普通包装且后续字段高度结构化,因此表现为渠道始终走 AI。
- 组织全自动化则有直接来源特判:shouldAutomaticallyConfirm() 同时要求 source=agentbus。这使手工任务即使开关开启也永远保留人工确认,与用户要求的全局语义冲突。
- 迁移 013 把旧任务固化为 AI affinity 只是历史保护,不解释新任务,也不应被本次修复回写;全局化只影响未来新任务/新会话。
### 当前实现与安全边界
- 全消息 route resolver 现在对手工与 AgentBus 共用:
- 任意行存在唯一已登记指令(含登记别名或唯一一字符纠错)即可确定 route/mode 快照;
- 没有指令时,字段签名必须至少包含两个不同标签,所有标签都能在候选 route 中唯一解析,并满足该 route 的定位/业务必填标签,最终只能剩一个候选;
- 多 route、未知标签、不完整签名、两类名单对象以及无恢复状态的取消/恢复等天然歧义保持 unresolved/ambiguous,不猜测。
- 单号替代客户+日期的既有业务规则继续用于签名必填判断;order_update_shared_plan 的完整单号仍可替代出发日期。没有新增业务字段或 ERP 引用。
- 全消息中的嵌入指令只决定 route 快照;Program parser 不静默删除未知前置自然语言。额外包装仍返回 program_unsupported_syntax,Program 下失败关闭,Auto 只按既有技术 allowlist 整体回退 AI。
- 字段签名只为“已经确定是新任务”的输入选 route,不改变等待补充会话的归属。detectBusinessDirective() 仍只把明确业务指令当作新动作,避免完整字段补充被拆成新任务。
- 组织全自动化现在只依赖 needsInput=false、blocked=false 和组织开关;手工与 AgentBus 的合法解析结果使用同一自动确认路径。缺资料、阻断、歧义、插件失败和 ERP 不确定仍停止。
- 来源仍保留在任务信封中用于 UI、渠道 accepted/result 和审计,但不再覆盖 parser 或 confirmation mode。
- operation Schema、ERP mapping、Chrome 扩展写前门禁、单次提交与 fresh requery 均未改变;本次不需要扩展版本或 ZIP。
### 测试与性能
- 新回归先准确暴露 3 个缺口:嵌入指令无法路由、完整字段签名无法路由、manual automation 被拒绝。
- 回归现固定:
- 嵌入唯一指令能拿到 route,但未知包装仍失败关闭;
- 无指令且完整唯一的登记字段签名可 Program 解析;
- 歧义/单标签不路由;
- 多动作仍返回 program_multiple_actions;
- manual 与 AgentBus 在组织开关开启时都自动确认,缺资料/阻断/开关关闭仍不自动;
- 两个新任务入口各调用同一个模式快照函数,AgentBus listener 不丢来源或回执路由。
- 全消息初版对 500 行名单逐行计算编辑距离,虽未超 250ms P95 门槛但墙钟约 848ms。现在按登记指令长度 ±1 过滤候选行,字段签名最多检查 64 个标签;同一性能测试墙钟约 22—29ms。
- 页面 app.js 语法及 parser/control-plane/AgentBus 定向套件 79/79 已通过;仓库治理 9/9、TypeScript 检查、完整控制面 95/95、legacy 全量、build 和 `git diff --check` 也全部通过。
- 确定性 parser 版本已递增为 ltjt-program-parser-v1.0.3,gold corpus 已加入来源中性字段签名和包装失败关闭样例。
### 文档与版本同步
- 根 README、控制面 README、设计入口、业务登记、操作台开关提示和生命周期测试说明已统一为“所有来源”;页面 app cache key 已更新。
- 运营输入合同仍推荐首行业务指令。曾短暂修改模板说明,复核治理规则后已撤回;活动 Markdown SHA-256 恢复为发布清单登记的 45b3893e86959d86235ebfc8b34cec4be519624b245ce188e6c52efb61404443,无需重建 DOCX。
- 当前脱敏 corpus 没有未登记历史 AgentBus 旧标签真值;v1.0.3 只对当前登记指令/标签做保守兼容。未登记旧标签不会被猜测为 Program 成功。
## 当前发布与执行边界
- 当前 Chrome 扩展/制品基线为 0.5.148;本轮新增预检后 form/native request 双哈希与网络前零写分类修复。8786 静态页面已指向该最低版本,但运行中的 Chrome 扩展仍为 0.5.147,需用户另行授权重载。
- 五个业务 Skill 为 0.5.121,Agent Prompt 为 ltjt-agent-prompt-v1.7-lifecycle-date-rollover;当前控制面程序解析器随本次源码变更为 ltjt-program-parser-v1.0.3。
- 18 项运行态曾核验全部为 Program、revision 3,组织全自动化当时关闭;本轮不读取秘密或管理员数据,不假定当前数据库状态未变,也不会自动切换设置。
- 无年份月日规则:新建、三类修改、酒店安排变更及取消/恢复按任务日期取下一次发生日;明确年份保持不变,名单等完整年份契约未放宽。
- 生命周期仍要求精确对象/引用、唯一状态、页面身份、ownership、保存前停止、明确服务端响应和 fresh requery;不确定写入不得自动重试。
- 散拼母团无子单提示只有 resolved kind、ERP 明确无子单数据、提交入口缺失三项同时成立才触发。
## 安全、验证与归档
- 本轮没有创建、确认、重试或派发真实任务,没有调用真实 AI,没有访问/写入 ERP,没有读取 .env,没有重载扩展、重启 8786、部署或外发。
- 当前 Codex 任务没有附加运行服务的 app terminal;未改用进程环境或秘密补证。
- 活动服务未在本轮重启,因此源码修复要在用户另行授权重启 8786 后才进入运行态;本轮也未改变任何 route 模式或组织全自动化开关。
- 本次压缩前的完整发现已按相同 SHA-256 冻结到 [全局解析/自动化 findings 快照](archive/project-history/2026-08-26/findings-pre-compression-global-parser-automation.md);此前完整生命周期与解析研究见同日及 2026-08-25 的 archive/project-history/。归档只供追溯,不定义当前规则。