Files
LWLT-AIBOT/archive/project-history/2026-08-27/task_plan-pre-compression-independent-headcount-parser.md
T

152 lines
15 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.
# 项目文件治理计划
## 当前任务:修复 09:32 AgentBus 下单网络前误阻断(已完成)
- **目标:** 证明 `TASK-20260827013256-D06X1n4` 的 ERP 写入边界,纠正其误分类,并让单个下单在 ERP 原生表单规范化后仍使用严格、正确的双哈希门禁。
- **授权与安全边界:** 用户已授权 Chrome/扩展只读取证、现有任务 no-write 纠正和新版扩展发布;不重试任务、不触发 ERP 保存、不重载扩展、不重启服务、不改变解析模式或自动化开关。
### 已确认事实
- 任务为 AgentBus、`team_order_create`、Program v1.0.3、automatic;解析与预检均通过,问题不在解析策略或自动化开关。
- 扩展后台保存的预检受保护字段哈希为 `5f3d…`;被阻止联网的原生请求哈希同为 `5f3d…`。预检调用 `SubmitInfoForm()` 返回后,ERP 已把浏览器表单规范化为 `a5f4…`,旧代码却仍用调用前哈希校验调用后表单,因而误阻断。
- 页内结果明确为 `live_submit_attempted=false`,且没有 native request/server response/requery/side effect,本次没有向 ERP 发出保存请求。
- 插件后台又把任何非 completed 结果无条件上报为 `write_attempted=true/no_erp_write=false`,使明确零写阻断被误升级为 `reconciliation_pending`。
### 已完成与剩余
- [x] 通过 Chrome CDP 只读核对 ERP 当前表单、扩展 `0.5.147` 本地 preflight/live 证据和零网络边界;未读取表单值。
- [x] 预检在原生函数返回后另存 post-intercept form hash;正式提交分别校验当前 form 与 intercepted native request,不放宽受保护字段哈希。
- [x] 将明确网络前阻断收敛为 `blocked / prewrite_blocked / write_attempted=false / no_erp_write=true`;缺失结果或网络边界不明仍保持 uncertain。
- [x] 在前后端双重历史证据门禁下,把报告任务和扩展本地副本纠正为 blocked/no-write,写入审计并释放队列;没有重试或提交 ERP。
- [x] 扩展、平台最低版本、mapping、测试和发布基线递增至 `0.5.148`;旧 `0.5.147` ZIP 已按原哈希归档,新 ZIP 已逐文件匹配源码。
- [x] 规定门禁全部通过:仓库治理 9/9、TypeScript、完整控制面 97/97、legacy 全量、build 和 diff;重载扩展仍需用户另行授权。
## 最近完成:组织全自动化按钮权威状态同步
- 页面已在 EventSource 重连、30 秒刷新和 visibility/focus 时同步数据库开关;缓存键为 `20260827-automation-state-sync-1`,完整门禁通过,运行服务无需重启。
## 当前任务:修复 AgentBus 微信传输包装并启用全局自动化(已完成)
- **目标:** 让 AgentBus 的标准 `New WeChat message / Conversation / Text` 传输信封在进入全局业务路由前被安全解包,使其中的 18 项登记业务指令和字段使用与手工输入相同的 Program 策略;在用户授权后加载修复并开启组织全自动化。
- **范围:** AgentBus 输入适配、任务快照前的业务文本、严格包装契约、回归与运行态交付边界;不放宽 Program parser 对任意未知字段/自然语言的失败关闭。
- **安全边界:** 用户已明确授权本轮开启组织全自动化并重启 8786;不重试或修改用户报告的任务,不创建/确认/派发任务,不访问/写入 ERP,不切换 parser 模式,不读取 `.env` 内容。
### 阶段
- [x] 核对用户日志并定位实际任务 `TASK-20260827004712-_PGgTzg`。
- [x] 只读核验任务快照、parse decision、18 项运行设置及脱敏原文结构,并用当前 resolver 离线重放。
- [x] 证实根因:微信传输信封的 `Conversation:`、`Text:` 被当作业务字段,导致 route unresolved,任务在快照阶段安全回退为 AI;18/18 route 本身仍为 Program revision 3。
- [x] 在 AgentBus 边界实现严格、可纯测的微信信封解包,并确保近似/空包装保持原文、不吞业务内容。
- [x] 用真实同形脱敏 fixture 及报告任务原文的只读离线重放证明解包后命中 `team_order_create` Program,并运行规定全量门禁。
- [x] 源码阶段收敛项目记录并明确既有任务不重解析;随后已取得本轮运行态授权。
- [x] 授权后确认无在途解析/ERP 任务,通过控制面事务方法开启组织全自动化并写入审计。
- [x] 优雅停止旧 PID `76113`,以标准 `pnpm run dev` 启动新 PID `84022`;验证数据库、迁移 013、4 个 AgentBus 会话和单一监听 ready。
- [x] 复核全自动化为 true、18/18 route 为 Program revision 3,且报告任务仍未确认、未重放。
### 固定决策
- 只识别已证实的三行传输头:首行精确为 `New WeChat message`、第二行 `Conversation:` 有值、第三行 `Text:`;业务正文由 `Text:` 同行值和后续行组成。
- 不把 `Conversation` / `Text` 注册成全局业务字段,也不让 Program parser 普遍忽略未知标签,避免其他来源的错误输入被误执行。
- 解包属于 AgentBus source adapter 职责;解包后的正文仍经过同一 route snapshot、AI/Shadow/Auto/Program 编排和 operation 契约。
- 修复只影响未来新 AgentBus 消息;当前已由 AI 完成解析的任务不自动重放或变更。
### 当前错误记录
- 首次合并读取活动根文件、登记表和用户附件时输出被截断;已分开完整读取活动 findings/progress 与附件尾部,并从日志精确定位任务,不把截断输出当完整证据。
- 首轮定向回归中空 `Text:` 近似包装断言期待保留末尾空格,但 AgentBus 入口本来就会 trim;实现仍保留完整包装且未解包。已把断言改为既有规范化语义,不放宽提取条件。
### 完成结论
- 报告任务的实际快照为 `business_route_id=null / parser_mode=ai / parser_engine_affinity=ai`;18/18 业务设置仍为 Program revision 3。AI 调用不是模式配置失效,而是传输信封污染 route 识别。
- 146 条 AgentBus 历史任务的只读聚合中,144 条使用同一微信信封;严格解包后 142 条可命中登记 route,另外 4 条继续 unresolved,不猜测。
- `extractAgentBusBusinessText()` 只在 AgentBus listener 内解开已证实信封,并在调用 `TaskService.ingestMessage()` 前交付纯业务正文;日志仅新增解包布尔值、正文长度和 SHA-256 摘要。
- 报告任务原文用新适配器离线重放后精确命中 `team_order_create`,Program v1.0.3 返回 `agent_parse_passed`,无 fallback。
- 定向 33/33、仓库治理 9/9、TypeScript、完整控制面 96/96、legacy 全量、build 和 `git diff --check` 均通过。
- 用户授权前已确认没有在途解析或 ERP 任务;组织全自动化已从 false 改为 true,并写入 `organization.automation_enabled` 系统审计事件。
- 8786 已加载本次修复:旧 PID `76113` 优雅退出,新 PID `84022` 单一监听;数据库、Schema、迁移 013 和 4/4 AgentBus 会话 ready。
- 18/18 route 保持 Program revision 3;报告任务仍为未确认的历史 AI 任务,没有被重解析、自动确认或派发。
## 最近完成任务:受控重启 8786 并加载全局解析/自动化修复(已完成)
- **目标:** 在用户明确授权后重启正式控制面,使已完成的来源无关解析策略与组织全自动化修复进入运行态。
- **安全边界:** 只重启 8786 的标准 `pnpm run dev` 进程树并执行只读健康检查;不创建、确认、重试或派发任务,不访问/写入 ERP,不修改 route 模式或组织开关,不读取 `.env`。
### 阶段
- [x] 按治理规则恢复活动上下文并保留全部既有未提交改动。
- [x] 精确解析旧监听 PID、父进程、启动入口和日志去向;重启前确认 `/health/live` 与 `/health/ready` 正常。
- [x] 对旧服务 PID `41546` 发送 TERM,确认旧进程树退出且 8786 完全释放。
- [x] 使用原 `pnpm run dev` 入口启动新进程树;新监听 PID `76113`,且只有一个 8786 监听进程。
- [x] 验证数据库、Schema、迁移 013、4 个 AgentBus 渠道及新版页面资源全部 ready。
### 错误与处理
- 首次探测通用 `/health` 得到 404;源码确认当前契约为 `/health/live` 和 `/health/ready`,随后两项均通过。
- 首次提取页面 cache key 的只读 shell 正则引号未闭合;命令未产生状态变更,改用平衡的单引号正则后确认新版资源已提供。
- 首次把五项最终门禁并行执行时,控制面 AgentBus 子进程无后续输出且未退出;已中止该测试进程,AgentBus 单独 11/11 通过,并按项目既有串行方式完整重跑控制面 95/95。运行中的 8786 未受影响。
### 完成结论
- 8786 已于 2026-08-27 受控重启并加载当前源码;新 PID `76113`,工作目录为项目根目录。
- `/health/ready` 返回 `ok=true`、数据库与 Schema ready、必需迁移为 `013_business_parser_modes`,4/4 AgentBus 渠道 connected 且 session ready。
- 页面实际提供 `app.js?v=20260826-global-parser-automation-1`,其中手工与 AgentBus 共用的“所有来源”自动化文案已生效。
- 重启记录同步后的仓库治理、类型、控制面 95/95、legacy 全量、build 与 diff 门禁均通过。
- 本轮没有改变数据库策略/开关,没有任务 mutation、AI 调用、插件派发、ERP 访问或外部发送。
## 最近完成任务:让解析策略与全自动化对所有任务来源全局生效(已完成)
- **目标:** 修复手工输入与 AgentBus 在解析路由上的行为分叉,使 18 项解析策略(AI / Shadow / Auto / Program)以及由该策略决定的全自动化行为统一作用于所有受支持任务来源。
- **范围:** 控制面任务接入、解析编排、任务级模式快照、AgentBus accepted/result 链路、操作台策略配置和相关契约测试;不改变 operation 业务 Schema 或 ERP 写入门禁。
- **安全边界:** 不创建、确认、重试或派发真实任务,不访问/写入 ERP,不读取 `.env`,不重载扩展、不重启服务、不部署、不外发。
### 阶段
- [x] 完整恢复项目上下文、session catch-up、工作区状态和历史业务事实;既有未提交改动全部保留。
- [x] 对比手工输入与 AgentBus 的任务创建、解析编排、模式快照和自动确认/执行路径,形成根因与影响面。
- [x] 实施来源无关的全消息 route 解析与单一模式快照入口,消除 automation 来源特判,并补齐 AgentBus 四模式及全自动化回归。
- [x] 完成仓库治理、类型、控制面、legacy、构建和 diff 验证。
- [x] 收敛 planning 文件,说明代码完成项、运行态启用边界和未执行的外部动作。
### 固定决策
- 解析模式由业务 route 的全局策略决定,任务来源只负责输入与回执适配,不得强制覆盖为 AI。
- AgentBus 与手工输入必须经过同一 operation 契约、fail-closed 校验和任务级策略快照;不能通过跳过解析门禁来实现自动化。
- “全局生效”默认作用于未来新任务;不自动重解析或修改历史任务。
- 不因修复自动切换任何业务当前模式,也不未经授权重启 8786 或触发真实 AgentBus/ERP 流量。
- 无指令输入只有在全部已填写标签均被一个 route 接受、且该 route 的业务定位必填标签完整时,才允许用字段签名确定 route;多 route、未知标签和不完整签名保持 unresolved/ambiguous,不猜测。
- 全消息中嵌入的唯一业务指令可决定任务模式快照,但 Program parser 不静默丢弃未知前置自然语言;额外包装仍按 unsupported syntax 失败关闭。
### 当前错误记录
| 错误 | 尝试 | 处理 |
|---|---:|---|
| 首次合并读取四个根文件的输出超过单次显示预算 | 1 | 改为逐文件读取,已完整恢复上下文 |
| 活动 plan/progress 因新增任务超过治理上限 | 1 | 先按 SHA-256 完整冻结到当日历史,再语义压缩活动文件并链接归档 |
| 当前 Codex 任务没有附加 app terminal,无法读取 8786 的实时 stdout | 1 | 未读取进程环境或秘密;继续用活动源码、现有安全日志契约和回归确定修复,不重复同一检查 |
| 非登录 shell 找不到 `node`,失败回归未启动 | 1 | 通过工作区依赖定位到 bundled Node 绝对路径,后续命令显式使用该 runtime,不重复裸 `node` |
| 全消息 resolver 首次实现后把“同一轮两个明确指令”提前归为一般歧义 | 1 | 保留首行已知 route 作为 parser 的安全主动作,让既有字段提取阶段继续返回更精确的 `program_multiple_actions`,不放宽执行 |
| 首次压缩 findings 的补丁脚本因 Markdown 反引号破坏 JavaScript 模板字符串而在解析前失败 | 1 | 已确认活动 findings 仍完整存在;改用不含模板反引号的补丁文本,避免重复同一转义方式 |
| bundled Node 的 `--run` 子脚本仍通过空 PATH 查找 `node`,规定门禁未启动 | 1 | 不修改 PATH 或环境;改为用 bundled Node 直接运行 test runner 与项目 TypeScript CLI 的绝对入口 |
| legacy 全量测试首次输出超过会话显示预算,无法从该次输出确认退出状态 | 1 | 使用同一测试集合与 dot reporter 完整重跑,退出码 0;未把截断当成通过证据 |
### 完成结论
- 未来新建的手工与 AgentBus 任务现在共用同一全消息 route resolver、任务级 parser 模式快照和组织全自动化安全门禁;来源只保留作信封、回执和审计信息。
- Program parser 版本为 `ltjt-program-parser-v1.0.3`。未知包装、多 route、未知/不完整字段签名继续失败关闭;历史任务不重解析,当前数据库策略和组织开关未被本轮修改。
- 仓库治理 9/9、TypeScript、控制面 95/95、legacy 全量、build 和 `git diff --check` 全部通过。
- 本轮未重启 8786;活动服务需在用户另行授权重启后才会加载本次控制面源码。
## 最近完成任务摘要
- **插件后台页节流与成功任务伪错误:** 历史扩展 `0.5.147` 已改用原生 Ajax complete、同步客户字段复核和 `webNavigation` 精确 Frame;当前已由 `0.5.148` 替代。控制面/UI 不再把成功边界事实合成错误。
- **18 项确定性解析策略:** 18 route、Program compiler、统一 validator、AI/Shadow/Auto/Program 编排、迁移 013、任务快照与操作台已完成;运行态曾核验 18/18 为 Program,组织全自动化关闭。
- **取消/恢复日期与生命周期:** 无年份日期按任务日取下一次发生日;精确路由 token、列表/编辑页门禁和 fresh requery 保持失败关闭。该阶段扩展曾推进至 `0.5.147`,当前发布基线为 `0.5.148`。
- **其他近期完成:** 散拼母团无子单业务提示、插件通用计时、右侧详情整栏滚动、ERP 空闲保活与异常链接受控刷新均已完成并有回归。
## 历史与持续边界
- 本次压缩前全文见 [task plan 冻结快照](archive/project-history/2026-08-26/task_plan-pre-compression-global-parser-automation.md);配套进度全文见 [progress 冻结快照](archive/project-history/2026-08-26/progress-pre-compression-global-parser-automation.md)。归档只供追溯,不定义当前规则。
- 更早的完整计划、证据和发布历史见 `archive/project-history/`、`archive/evidence/` 和 `archive/releases/`。
- 当前发布版本、文件名和 SHA-256 只以 [发布清单](dist/release-manifest.json) 为准。
- 保留工作区全部既有未提交改动;真实 ERP 写入、任务重试、扩展重载、部署、重启和外部发送仍需用户另行明确授权。