186 lines
16 KiB
Markdown
186 lines
16 KiB
Markdown
# 项目文件治理计划
|
|
|
|
## 当前任务:名单覆盖行英文名写前纠正(已完成)
|
|
|
|
- **目标:** 修复已确认覆盖的名单行在 `DaoRuDones` 后遗留旧 `pinyinxm`、继而触发 `passenger_native_projection_mismatch` 的问题。
|
|
- **范围:** Chrome 名单适配器、回归、版本化 ZIP、mapping/release gate 与运行证据;不改变 Excel/Program 解析、覆盖确认或保存后回查契约。
|
|
- **安全边界:** 仅对合并计划确认变更的序号回写规范化 `NAME`;写前投影仍须全等。不开启真实 ERP 保存,不重载扩展、不重启、不部署。
|
|
|
|
### 阶段
|
|
|
|
- [x] 核对两次运行时间线及源工作簿,确认附件解析成功且第二次在 ERP 保存前仅第 1、2 行英文名不一致。
|
|
- [x] 先补覆盖旧行的回归约束,再实施最小适配器修复。
|
|
- [x] 同步扩展版本、mapping、发布门槛、ZIP 与清单。
|
|
- [x] 运行定向及规定全量门禁,收敛 findings/progress;真实复测等待另行授权。
|
|
|
|
### 完成结论
|
|
|
|
- 平台手工附件链路已由运行证据证明有效;失败发生在扩展调用 ERP 原生名单解析后的父表单保存前,不是附件上传或工作簿解析失败。
|
|
- 扩展 `0.5.151` 只对已确认且确实变化的名单序号回写规范化 `NAME → pinyinxm`,未变更行继续恢复快照,完整投影和保存后 fresh requery 均未放宽。
|
|
- 仓库治理 9/9、控制面 121/121、legacy 244/244、TypeScript、build、ZIP 完整性与源码一致性全部通过;未重载、重启、部署或写 ERP。
|
|
|
|
### 错误记录
|
|
|
|
- 首次从扩展目录打 ZIP 时把回到根目录的层级多写一层,目标文件未创建;确认无半成品后改为 `../../dist`,压缩完整性通过。
|
|
- 首轮 lifecycle 全量还命中两个旧内部版本断言;已同步到 0.5.151。仓库治理同时识别出 Word 遗留的 162 字节锁文件,按临时残留规则精确清理。
|
|
- 首轮控制面全量 120/121,仅页面脚本缓存键断言仍为旧名单附件版本;已同步到新的覆盖行修复缓存键后重跑全量。
|
|
|
|
## 当前任务:运营指令表示例合并与精简(已完成)
|
|
|
|
- **目标:** 以桌面 DOCX 的新示例和精简方向更新当前单一源;桌面内容与现行契约冲突时,以活动源码和已实现能力为准。
|
|
- **范围:** 18 项运营模板、示例、用户可见说明、DOCX 版本与发布清单;不改业务能力、Schema、mapping、Skill 或 Chrome 运行逻辑。
|
|
- **安全边界:** 桌面 DOCX 只作参考数据;保留既有未提交改动,不读取 `.env`,不创建任务、调用 AI、访问/写入 ERP、重载、重启、部署或外发。
|
|
|
|
### 阶段
|
|
|
|
- [x] 比对桌面 12 页与当前 15 页,逐项判定可采用示例和冲突内容。
|
|
- [x] 合并有效示例并删除运营人员不需要的内部实现释义。
|
|
- [x] 生成 0.5.121 DOCX,渲染并检查全部页面。
|
|
- [x] 归档 0.5.120、同步发布清单并运行规定全量门禁。
|
|
|
|
### 决策
|
|
|
|
- 名单仍是“文字定位 + 单个 Excel 附件 + 等待附件 + Program-only”,不采用桌面旧版的正文 TSV。
|
|
- 桌面示例尽量原样采用;散拼子单示例补回必填人数,`LLW-261101A-A` 按用户确认保留。
|
|
- `before_snapshot`、内部字段、解析器分流、OSS 和回查实现从运营表移除,但继续由技术契约和代码约束。
|
|
|
|
### 验证结论
|
|
|
|
- 新 DOCX 为 12 页,已逐页确认中文字体、分页、长行和名单附件说明,无方框字、重叠、截断或溢出。
|
|
- 门禁通过:仓库治理 9/9、TypeScript、控制面 121/121、legacy 244/244、build、DOCX 压缩完整性和 `git diff --check`。
|
|
- 未创建或修改真实任务,未调用 AI、访问/写入 ERP、重载扩展、重启服务、部署或外发。
|
|
|
|
### 错误记录
|
|
|
|
| 错误 | 尝试 | 处理 |
|
|
|---|---:|---|
|
|
| 首次把 TypeScript 定向测试直接交给 Node,因 `.js` 导入解析未启动 | 1 | 改用项目既定 `--import tsx` 与完整标准脚本,定向 22/22、全量 121/121 通过。 |
|
|
| 首次沿用旧缓存中的 `container_tools/render_docx.py` 路径 | 1 | 通过当前 Documents 包文件清单定位根级 `render_docx.py`,成功渲染并检查 12 页。 |
|
|
| 临时渲染目录首次使用递归删除被安全策略拒绝 | 1 | 改为对已验证的精确临时目录逐文件删除后 `rmdir`,未触碰项目或用户文件。 |
|
|
|
|
## 并行任务:历史任务支持手动与批量删除(已完成)
|
|
|
|
- **目标:** 让管理员在 `/history` 直接删除单条任务,也可勾选当前页多条任务后一次确认批量删除;不能误跨组织或静默半删。
|
|
- **范围:** 任务删除服务、批量 API、历史目录交互、附件清理、控制面说明与回归;不改变任务创建、解析、确认或 ERP 执行契约。
|
|
- **安全边界:** 不调用真实删除 API、不删除现有任务、不读取 `.env`、不重启或部署。插件停止仅尽力而为,不能宣称撤回已发生的 ERP 写入或外部渠道副本。
|
|
|
|
### 阶段
|
|
|
|
- [x] 定位既有单任务硬删除与历史页缺口,并先补静态契约回归。
|
|
- [x] 实现 1–100 条唯一任务的组织隔离、全有或全无批量事务,单删复用同一核心。
|
|
- [x] 实现卡片单删、逐条勾选、选择本页、批量确认、并发锁定和本地状态收敛。
|
|
- [x] 冻结关联附件 storage key,并在数据库提交后调用现有 OSS 清理器。
|
|
- [x] 运行定向及规定全量门禁并收敛 findings/progress。
|
|
|
|
### 决策
|
|
|
|
- 批量选择只覆盖当前页;筛选、重置和翻页都清空选择,服务端刷新会裁掉当前页外选择。
|
|
- 批量数据库删除全有或全无;任一任务缺失或不属于当前组织时整批回滚,不返回逐条部分成功。
|
|
- 已确认或进入插件流程的任务仍允许管理员显式删除,但确认框必须提示 ERP 不可回滚;页面停止插件请求不阻塞平台删除。
|
|
|
|
### 验证结论
|
|
|
|
- 并行名单附件 WIP 写入前,仓库治理 9/9、TypeScript、页面 JavaScript 语法、历史删除定向回归、完整控制面 99/99、build 与相关文件 diff 检查通过;其后再次定向复跑历史删除测试仍通过。
|
|
- 当前全局工作区门禁受并行任务中间态影响:legacy 两项动态游客行红灯;新 `passenger-roster-workbook.test.ts` 尚无对应源码,导致 TypeScript/完整控制面失败;`lifecycle-adapters.js` 已更新但扩展 ZIP 尚未重包,仓库治理为 8/9。上述文件均不属于本功能,已保留且未代为实现、打包或回退。
|
|
- 用户随后明确授权重启;新服务 PID 29562 已成为 8786 唯一监听者,ready 检查确认数据库、Schema、迁移 014 和 4/4 AgentBus 渠道均就绪。未认证随机假 ID 的渠道单删及任务批删探针均返回 401 而非 404,证明路由已加载;未删除真实数据、未读取 `.env` 内容、未部署。
|
|
|
|
## 当前任务:AgentBus 渠道配置支持删除(已完成)
|
|
|
|
- **目标:** 让管理员可以在 `/channels` 删除不再使用的 AgentBus 用户渠道配置;删除后立即停止对应 listener、移除服务端保存的 key,并在操作台给出明确确认与结果反馈。
|
|
- **范围:** `AgentBusChannelService`、渠道 API、listener reload、操作台渠道目录、控制面说明与回归;不改变 AgentBus 协议或任务业务契约。
|
|
- **安全边界:** 保留全部既有未提交改动;不读取 `.env`;不删除当前真实渠道、不调用运行态 API、不重启或部署。删除接口必须按组织隔离、要求管理员 mutation 会话并保留删除审计;由完整旧环境变量托管且会被自动重建的兼容渠道不能伪装成可删除。
|
|
|
|
### 当前事实
|
|
|
|
- 修改前渠道目录只支持创建、启停、改名和轮换 key;现已增加 `DELETE /api/channels/:channelId` 与确认式页面删除动作。
|
|
- 现有数据库外键已经定义删除语义:历史任务保留但 `tasks.channel_id` 置空,渠道待发送回执随 `agentbus_deliveries` 级联清理;加密 key 随 `user_channels` 行一并移除。
|
|
- `AgentBusManager.reload()` 会停止旧 listener 并按当前启用渠道重建连接,因此删除事务成功后 reload 即可让运行态收敛。
|
|
- 完整旧环境变量配置会让 `ensureLegacyChannel()` 自动创建 `legacy-env` 兼容渠道;该配置仍存在时,删除数据库行只会立刻重建,必须在 API 和 UI 明确阻断。
|
|
|
|
### 阶段
|
|
|
|
- [x] 恢复根入口、planning 文件、工作区状态与业务登记;保留既有修改。
|
|
- [x] 定位渠道持久化、API、listener manager、操作台和现有测试。
|
|
- [x] 先补删除契约回归,再实现组织隔离的删除事务、审计、listener reload 和确认式 UI。
|
|
- [x] 运行定向测试及规定全量门禁,收敛 findings/progress;运行态操作继续等待另行授权。
|
|
|
|
### 决策
|
|
|
|
- 采用现有 Schema 已设计好的硬删除语义,不新增软删除状态:这样 key 密文确实离开活动数据库,历史任务本体仍保留。
|
|
- 删除是不可撤销的显式管理员动作;页面必须二次确认,并说明连接会停止、该渠道持久化 AgentBus 回执记录(包括未发送回执)会被移除、历史任务不会被删除。
|
|
- 完整旧环境变量仍托管 `legacy-env` 时返回明确冲突;环境托管解除后,该遗留行才允许从数据库删除。
|
|
- reload 使用“在途期间再次请求则完整重放一次”的队列语义,避免删除与并发渠道变更合并后留下已删除 listener。
|
|
|
|
### 验证结论
|
|
|
|
- AgentBus/控制面定向 61/61、TypeScript、页面 JavaScript 语法、完整控制面 99/99 和 build 通过。
|
|
- legacy 中除仓库治理重复包含的 3 个既有发布同步红灯外,其余 236 项通过;`check:repo` 同样仅报暂挂人数发布链的 DOCX/扩展 ZIP/Skill 包未收敛。本次涉及文件的 `git diff --check` 通过。
|
|
- 没有调用运行态渠道 API、删除真实配置、读取 `.env`、重启或部署。
|
|
|
|
### 错误记录
|
|
|
|
| 错误 | 尝试 | 处理 |
|
|
|---|---:|---|
|
|
| 首次直接 `node --run check` 的子命令在空 PATH 中找不到 Node | 1 | 改用 workspace bundled Node,并为规定脚本显式提供 bundled PATH;类型检查和构建均通过。 |
|
|
| 全量仓库治理命中暂挂人数发布链的 3 个半发布红灯 | 1 | 保留既有改动,不代替该任务重打包或回退;用定向、完整控制面、legacy 非治理项和 build 区分本次功能结果。 |
|
|
|
|
## 并行任务:修复独立团修改的人数分类解析(已完成)
|
|
|
|
- **目标:** 让 `order_update_independent` 的 Program parser 正确理解成人、占床儿童、不占床儿童和领队四类人数;用户输入 `8+1(占)+1(不占)+1` 应形成确定、可审计的修改 operation,而不是误报 `program_invalid_value`。
|
|
- **范围:** 活动业务登记、更新 Skill/契约、Program parser、operation Schema/mapping、脱敏 fixture、回归与必要发布同步;以实际影响面为准,不从 archive 反向覆盖。
|
|
- **安全边界:** 保留全部既有未提交改动;不读取 `.env`;不修改或重试用户现有任务,不创建/确认/派发真实任务,不执行 ERP 写入,不重载扩展、不重启服务、不部署、不外发。若需核对 ERP,只做用户已允许的只读界面检查。
|
|
|
|
### 完成结论
|
|
|
|
- 报告输入现在确定映射为 `pax.adult=8`、`pax.child_bed=1`、`pax.child_no_bed=1`、`pax.leader=1`;未提及的 `pax.infant` 不自动清零。
|
|
- Program parser 已同时兼容旧三段、旧四/五段纯位置和双标签四/五段语法;重复/半标注、空分段、负数、小数、超安全整数和合计为零继续失败关闭且不允许 Auto fallback。
|
|
- `pax.child_no_bed → ertrenshu` 已进入 operation plan、平台能力目录、插件写前快照/非负校验/写入/fresh requery 表驱动链,仍标记待授权 ERP 实写复测。
|
|
- 当前发布链为 Program `v1.0.4`、Prompt `v1.8-independent-headcount-categories`、扩展 `0.5.149`、五 Skill `0.5.122`、运营 DOCX `0.5.119`。
|
|
|
|
### 阶段
|
|
|
|
- [x] 恢复 README、planning 文件、session catch-up 和工作区状态;保留既有修改。
|
|
- [x] 通过业务登记表定位活动业务页、Skill、Schema、mapping 与实现,建立最小离线复现。
|
|
- [x] 核对 ERP 字段语义及现有人数 operation,确定兼容语法与 fail-closed 边界;无需读取真实订单。
|
|
- [x] 先补失败回归,再实施最小完整修复并同步受影响版本、文档和制品。
|
|
- [x] 完成 Skill 官方校验、DOCX 15 页渲染检查、版本化打包及规定全量门禁;运行态动作继续等待另行授权。
|
|
|
|
### 决策
|
|
|
|
- 最终一个未标注的 `+1` 只有在当前业务合同明确把四段顺序定义为“成人 + 占床儿童 + 不占床儿童 + 领队”时才可确定为领队;不依靠总数猜测。
|
|
- 两类儿童必须保留为独立语义字段并与 ERP 独立控件对应,不能压成单一儿童数。
|
|
- 修复只扩大明确、登记过的人数表达;未知标签、重复分类、顺序冲突、负数/小数和多动作继续失败关闭。
|
|
- 保留旧三段 `成人 + 带标签儿童 + 领队` 和旧四/五段纯数字位置格式;新增的四段带标签格式要求中间两段恰好各出现一次“占”和“不占”,最后一段仍为领队。标签可决定类别,不因书写次序交换数值。
|
|
- `child_no_bed` 继续处于“字段已映射、待授权 ERP 实写复测”层级;本轮不把代码/Schema 证据升级为真实写入验证。
|
|
- 组合人数只生成原文能确定的类别;本轮不静默补 `pax.infant=0`,避免意外清空既有婴儿数。需要清零时必须明确写“婴儿改为0”。同步修正 Prompt/Skill 中旧的“未出现类别按 0”矛盾措辞。
|
|
- 这是可观察的确定性解析语义增量,Program parser 升 `v1.0.4`;修改运营模板、Skill 和扩展能力目录分别触发 DOCX `0.5.119`、五 Skill 统一基线 `0.5.122`、扩展 `0.5.149` 发布链。
|
|
|
|
### 验证结论
|
|
|
|
- 定向:Program 22/22、lifecycle 52/52、运营模板 15/15、外部解析边界 66/66;五个 Skill 均通过官方 quick validator。
|
|
- 全量:仓库治理 9/9、TypeScript、控制面 117/117、legacy 244/244、build 和 `git diff --check` 均通过;DOCX 15 页无方框字、溢出或截断。
|
|
- 未修改/重试报告任务,未调用 AI、派发插件、访问或写入 ERP;未重载扩展、重启服务、部署或外发。
|
|
|
|
### 错误记录
|
|
|
|
| 错误 | 尝试 | 处理 |
|
|
|---|---:|---|
|
|
| 首次合并读取四个根文件时输出超过显示预算 | 1 | 已逐文件完整读取,并先冻结临界大小的旧计划再压缩活动计划。 |
|
|
| Prompt 路由器回归报告 1245 字符超过 1200 上限 | 1 | 语义等价压缩人数与目标保留规则,复跑运营模板 15/15。 |
|
|
| bundled Python 运行 Skill validator 缺少 `PyYAML` | 1 | 改用已带依赖的本机 Python 3.14 执行同一官方脚本,五个 Skill 全部有效。 |
|
|
| 全量 legacy 在并行名单改动先写测试、后写适配器时瞬时红 2 项 | 1 | 保留并行改动,待源码同步后 lifecycle 52/52、legacy 244/244 完整复跑通过。 |
|
|
| QA 临时目录的 `rm -rf` 被安全策略拒绝 | 1 | 改用精确路径 `find -delete` 加 `rmdir` 清理,只删除渲染临时文件。 |
|
|
|
|
## 最近完成任务摘要
|
|
|
|
- **09:32 下单网络前误阻断:** 扩展 `0.5.148` 已采用 post-intercept form/native request 双哈希,报告任务被严格纠正为 blocked/no-write;发布与全量门禁完成,Chrome 仍需另行授权重载。
|
|
- **全自动化按钮同步:** 页面在 SSE 重连、30 秒刷新、visibility/focus 时同步数据库权威值;静态资源已生效。
|
|
- **AgentBus 微信信封与全局自动化:** 严格解包已证实三行信封,手工/AgentBus 共用 route 与 Program;组织全自动化已在授权后开启,8786 已加载修复。
|
|
- **全局解析策略:** 18 项路由使用来源无关的任务级模式快照;Program parser 当前基线为 `v1.0.3`,歧义与未知包装仍失败关闭。
|
|
|
|
## 历史与持续边界
|
|
|
|
- 本次压缩前完整计划见 [2026-08-27 快照](archive/project-history/2026-08-27/task_plan-pre-compression-independent-headcount-parser.md);更早历史见 `archive/project-history/`,均只供追溯。
|
|
- 当前发布版本、文件名和 SHA-256 只以 [发布清单](dist/release-manifest.json) 为准。
|
|
- 真实 ERP 写入、任务 mutation、扩展重载、服务重启、部署和外部发送仍需用户另行明确授权。
|