chore: 更新公司通信费规则表与 AI 意图规划/work-log 文档
This commit is contained in:
@@ -445,8 +445,39 @@
|
||||
- 验证:`node --test web/tests/ai-document-query-model.test.mjs` 通过 17/17;`node --test web/tests/ai-document-query-model.test.mjs web/tests/workbench-intent-frame-model.test.mjs web/tests/workbench-ai-command-intent-model.test.mjs web/tests/workbench-ai-action-router.test.mjs web/tests/workbench-ai-intent-planner-model.test.mjs` 通过 46/46;`npm --prefix web run build` 通过;`git diff --check -- ...` 无输出;`curl -I http://127.0.0.1:5173/app/workbench` 返回 200。
|
||||
- 影响:用户输入“删除申请单草稿”后,结果标题下方会恢复高风险说明、候选单据卡片和“进入详情确认删除”快捷按钮;系统仍不会直接删除单据,而是要求进入详情核对后再操作。
|
||||
|
||||
- 23:02:我补上了 AI 历史会话里旧详情入口的点击前校验,避免单据已删除后重新进入会话再点“进入详情确认删除/查看详情”跳到坏详情页。
|
||||
- Git 提交检查:`git fetch --all --prune` 成功;当前 upstream 为 `origin/main`,`HEAD..@{u}` 与 `@{u}..HEAD` 均未输出新提交;当前工作区还有一个非本轮修改的规则 Excel 文件变更,本轮只修改 AI 工作台点击防护。
|
||||
- 根因:历史会话里保存的是静态详情链接,用户删除单据后再重进会话点击,原逻辑会直接 `emit('open-document')` 跳详情页,没有先确认单据是否仍存在;如果后端返回 404,就会在详情页暴露异常状态。
|
||||
- 修改:`usePersonalWorkbenchAiMode.js` 将详情链接点击处理改为异步校验;对带 `claim_id` 的 AI 历史详情入口先调用 `fetchExpenseClaimDetail()`,当返回 not found / 不存在 / 已删除 / 不可访问 / 无权时,不再跳转详情。
|
||||
- 修改:失效时调用既有 `markAiWorkbenchConversationDocumentDeleted()` 把当前会话里的 `#ai-open-document-detail` 写回 `#ai-deleted-document-detail`,刷新历史列表,并 toast 提示“该单据已经删除或不可访问,已将这条历史入口标记为不可查看。”
|
||||
- 验证:`node --test --test-name-pattern "deleted document|validates document detail" web/tests/ai-conversation-html-renderer.test.mjs web/tests/assistant-session-draft-delete.test.mjs` 通过 3/3;相关主链路 `node --test web/tests/ai-document-query-model.test.mjs web/tests/workbench-intent-frame-model.test.mjs web/tests/workbench-ai-command-intent-model.test.mjs web/tests/workbench-ai-action-router.test.mjs web/tests/workbench-ai-intent-planner-model.test.mjs` 通过 46/46;`npm --prefix web run build` 通过;`git diff --check -- ...` 无输出;5173 工作台路由返回 200。
|
||||
- 影响:用户重新进入历史会话后,如果之前的候选单据已被删除,再点旧快捷入口会在会话内变成“单据已删除/不可查看”,不会进入坏详情页;后端临时网络错误则不会错误失效化链接,会继续按原流程跳转。
|
||||
|
||||
- 23:10:我修复了 AI 工作台“直接提交”自然语言意图被自动提交的问题,让它先进入申请核对表,用户再次确认后才提交。
|
||||
- Git 提交检查:`git fetch --all --prune` 成功;当前 upstream 为 `origin/main`,`HEAD..@{u}` 与 `@{u}..HEAD` 均未输出新提交;工作区仍有一个非本轮修改的通讯费规则 Excel 变更,本轮没有触碰该文件。
|
||||
- 根因:`resolveExecutableTravelApplicationPlan()` 原来把包含 `submit_application` step 的计划直接映射为 `autoSubmit: true`;`startAiApplicationPreview()` 又在核对表 ready 时用 `confirmed: true` 调用提交动作,等于把“用户说直接提交”误当成“已核对并确认提交”。
|
||||
- 修改:`workbenchAiApplicationGateModel.js` 保留 `requestedSubmit` 语义,但不再给紧凑差旅申请返回 `autoSubmit: true`;`workbenchAiIntentPlannerModel.js` 仍识别 `requestedAction=submit` 和提交步骤,但 executable payload 固定 `autoSubmit: false`,并输出 `requestedSubmit` / `submitRequiresConfirmation`。
|
||||
- 修改:`usePersonalWorkbenchAiMode.js` 将确认标志传入申请预览流;`useWorkbenchAiApplicationPreviewFlow.js` 删除预览生成后的自动 `confirmed: true` 提交分支,改为在核对表 footer 提醒“系统不会自动提交申请,请先核对申请核对表”;`workbenchAiMessageModel.js` 持久化这两个确认标志,避免刷新或重进会话后提示丢失。
|
||||
- 修改:同步更新 `AI意图规划器` 相关文档,把“直接提交自动走完整链路”改成“先展示核对表,用户确认后进入提交链路”。
|
||||
- 验证:先用改过的测试跑出红灯;修复后 `node --test --test-name-pattern "direct-submit|direct submit|requires confirmation|confirmation metadata|intent planner|application gate" ...` 通过 14/14;相关主链路 `node --test web/tests/workbench-ai-application-gate-model.test.mjs web/tests/workbench-ai-intent-planner-model.test.mjs web/tests/ai-document-query-model.test.mjs web/tests/workbench-intent-frame-model.test.mjs web/tests/workbench-ai-command-intent-model.test.mjs web/tests/workbench-ai-action-router.test.mjs` 通过 51/51;`node --test --test-name-pattern "direct-submit|direct submit|direct-submit command" web/tests/expense-application-fast-preview.test.mjs` 通过 2/2;`npm --prefix web run build` 通过;`git diff --check` 无输出;`curl -I --max-time 5 http://127.0.0.1:5173/app/workbench` 返回 200。
|
||||
- 影响:用户输入“2026-02-20 至 2026-02-23,去上海出差,辅助国网仿生产服务器部署,交通火车,直接提交”时,系统仍能识别提交目标,但只会生成申请核对表/确认入口,不会直接提交给领导审批。
|
||||
|
||||
- 23:22:我把统一意图框架里的规则职责进一步收口为“安全策略字段”,避免规则继续承担复杂语义识别。
|
||||
- Git 提交检查:`git fetch --all --prune` 成功;当前 upstream 为 `origin/main`,`HEAD..@{u}` 与 `@{u}..HEAD` 均未输出新提交;工作区仍有一个非本轮修改的通讯费规则 Excel 变更,本轮没有触碰该文件。
|
||||
- 修改:`workbenchIntentFrameModel.js` 新增 `riskLevel`、`requiresCandidateSearch`、`requiresSelection`、`requiresConfirmation`、`executionMode`、`policyDecision`,让删除、审核、驳回等高风险动作稳定落到候选筛选或确认,而不是从规则里直接推执行。
|
||||
- 修改:`workbenchIntentActionPolicy.js` 改为优先消费 `policyDecision`,并把 `riskLevel`、`requiresSelection`、`requiresConfirmation` 透传到 route,方便后续 UI 和 action executor 统一读取。
|
||||
- 修改:调整 `resolveAction()` 顺序,让“查 3 天前的申请单”先命中查询动词,不再被裸 `申请` 误判为创建申请;这也是本轮红灯测试暴露出的规则误伤点。
|
||||
- 文档:`AI意图规划器/CONCEPT.md` 新增“规则兜底边界”,明确规则只输出安全策略,不拥有副作用授权;同时把第一阶段落地里的自动提交旧描述改为等待核对和二次确认。
|
||||
- 测试:先给 `workbench-intent-frame-model.test.mjs` 增加红灯断言,覆盖上下文删除、筛选删除、无风险审核、政策咨询和只读查询的策略字段;修复后该文件通过 8/8。
|
||||
- 验证:`node --test web/tests/workbench-intent-frame-model.test.mjs web/tests/ai-document-query-model.test.mjs web/tests/workbench-ai-command-intent-model.test.mjs web/tests/workbench-ai-action-router.test.mjs web/tests/workbench-ai-application-gate-model.test.mjs web/tests/workbench-ai-intent-planner-model.test.mjs` 通过 52/52;`npm --prefix web run build` 通过;`git diff --check` 无输出;`curl -I --max-time 5 http://127.0.0.1:5173/app/workbench` 返回 200。
|
||||
- 影响:后续规则层更像 guardrail,而不是继续堆关键词猜测;模型可以负责语义理解,规则负责高风险动作、候选筛选、选择和确认这些稳定边界。
|
||||
|
||||
## 遗留问题
|
||||
|
||||
- 23:22:本轮只是把现有前端 IntentFrame 的策略字段收口,尚未把后端 LLM 返回的结构化 intent frame 与该策略字段完全统一。建议下一步让 `/steward/plans` 或 runtime decision 输出同名字段,再由前端只做展示和兜底。
|
||||
- 23:10:本轮尚未在真实 5173 页面输入完整“直接提交”句子做点击级回放;当前证据来自模型/静态/构建和路由烟测。建议后续真页确认只出现申请核对表和二次确认入口,没有直接生成提交结果。
|
||||
- 23:10:`expense-application-fast-preview.test.mjs` 整文件仍有 13 个既有旧静态断言失败,失败点包括旧 assistantName 断言、旧申请 session 静态结构、表格样式和已拆分 composable 的旧代码片段匹配;本轮只验证了 direct-submit 相关子集通过。建议后续单独清理该测试文件,避免继续掩盖真实回归。
|
||||
- 23:02:本轮用单元/静态回归覆盖了旧详情入口失效逻辑,但还没有在真实 5173 页面完成“删除单据 -> 重新进入历史会话 -> 点击旧入口”的点击级回放。建议后续用真实草稿跑一次闭环,确认 toast、禁用按钮和历史会话刷新都符合预期。
|
||||
- 22:49:本轮用渲染级回归测试确认 trusted HTML 已恢复,但还没有做真实浏览器点击级回放和截图复核。建议后续在 5173 输入“删除申请单草稿”,确认真实主题下提示块、候选卡片和按钮没有拥挤或错位。
|
||||
- 22:42:本轮仍未做真实浏览器点击级回放确认高风险提示在 AI 工作台卡片里的视觉效果。建议后续在 5173 输入“删除申请单草稿”,截图确认提示块、候选卡片和“进入详情确认删除”按钮在当前主题下没有拥挤或错位。
|
||||
- 22:36:本轮仍未做浏览器点击级回放确认“删除申请单草稿”的实际 thinking 卡片视觉状态。建议后续在真实 5173 工作台输入该句,确认首条 thinking 为删除高风险策略、后续才是查询和筛选候选。
|
||||
@@ -550,7 +581,13 @@
|
||||
- [ ] 在真实 5173 AI 工作台输入“删除申请单草稿”,确认首条 thinking 明确显示“删除”高风险策略,且结果只展示申请单草稿候选。(来源:22:36 删除动作 thinking 修复)
|
||||
- [x] ~~为高风险删除/审核候选结果补充用户可见确认边界说明和实体快捷按钮文案。~~(完成于 22:42,证据:`workbench-intent-frame-model.test.mjs` 新增结果提示回归通过,相关前端测试 45/45 通过,前端 build 通过)
|
||||
- [x] ~~修复“删除申请单草稿”高风险提示和候选卡片被 trusted HTML 安全渲染整块丢弃的问题。~~(完成于 22:49,证据:新增渲染级红灯测试后修复,相关前端测试 46/46 通过,前端 build 通过)
|
||||
- [x] ~~修复 AI 历史会话旧详情入口在单据已删除后仍可跳转坏详情页的问题。~~(完成于 23:02,证据:deleted document / validates document detail 定向测试 3/3 通过,相关主链路测试 46/46 通过,前端 build 通过)
|
||||
- [x] ~~修复“直接提交”自然语言意图绕过申请核对表并自动提交的问题。~~(完成于 23:10,证据:direct-submit 定向测试 14/14、相关主链路测试 51/51、fast-preview direct-submit 子集 2/2、前端 build 与 `git diff --check` 均通过)
|
||||
- [x] ~~把前端统一意图框架里的规则职责收口为稳定安全策略字段。~~(完成于 23:22,证据:`workbench-intent-frame-model.test.mjs` 红灯后转绿,相关前端测试 52/52 通过,前端 build 与 `git diff --check` 均通过)
|
||||
- [ ] 在真实 5173 AI 工作台输入“删除申请单草稿”,确认结果卡片上方显示高风险说明,候选单据按钮显示“进入详情确认删除”。(来源:22:42 高风险结果提示补强)
|
||||
- [ ] 在真实 5173 跑“删除单据 -> 重新进入历史会话 -> 点击旧详情入口”,确认旧入口禁用、toast 提示和历史会话刷新符合预期。(来源:23:02 旧详情入口点击前校验)
|
||||
- [ ] 在真实 5173 AI 工作台输入“2026-02-20 至 2026-02-23,去上海出差,辅助国网仿生产服务器部署,交通火车,直接提交”,确认系统只生成申请核对表和二次确认入口,不直接提交审批。(来源:23:10 直接提交确认边界修复)
|
||||
- [ ] 将后端模型计划 / runtime decision 的结构化输出与前端 IntentFrame 策略字段对齐,统一 `riskLevel`、`requiresCandidateSearch`、`requiresSelection`、`requiresConfirmation`、`executionMode`、`policyDecision` 命名。(来源:23:22 规则职责收口)
|
||||
- [ ] 单独修复或重写 `workbench-ai-mode-switch.test.mjs` 的旧静态结构断言,使它适配 `WorkbenchAiFileStrip` 和 OCR composable 拆分后的真实代码。(来源:17:26 额外测试发现)
|
||||
- [ ] 单独修复或重写 `workbench-ai-mode-expense-scene-action.test.mjs` 与 `expense-application-fast-preview.test.mjs` 中继续扫描旧 Vue 单文件的静态断言,改为覆盖 composable/model 的行为测试。(来源:17:40 上下文提交验证)
|
||||
- [ ] 在真实 5173 AI 工作台回放“2026-02-20 至 2026-02-23,去上海出差,辅助国网仿生产服务器部署,交通火车”,确认唯一申请候选流直接生成申请核对表。(来源:17:48 无动作话术直进申请预览修复)
|
||||
|
||||
Reference in New Issue
Block a user