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 无动作话术直进申请预览修复)
|
||||
|
||||
@@ -18,11 +18,25 @@
|
||||
- 验证:两个 `SKILL.md` frontmatter 分别校验通过,路径规则检索命中,两个技能副本的模板和 UI 元数据 diff 一致,`git diff --check -- .codex/skills/write-development-docs hermes/skills/domain/write-development-docs` 通过。
|
||||
- 影响:后续新功能落文档会先按日期建目录,再进入 `feature`,最后按具体功能点独立建目录,便于按天回溯和按功能点拆分。
|
||||
|
||||
- 21:30:我针对 AI 工作台意图门控做了三处加固,守住高风险动作的确认底线、补齐缺失的兜底与预筛逻辑。
|
||||
- Git 提交检查:`git fetch --all --prune` 后 origin/main 落后本地 0、领先本地 0;本地 ahead 3 个提交(`6b0756a5`/`4d8a606c`/`23f7de6c`),均与本任务无关;工作区有大量未提交改动,本次只动 `web/src/composables/workbenchAiMode` 与对应测试。
|
||||
- 背景:先通读门控全链路(`workbenchAiApplicationGateModel` / `workbenchIntentFrameModel` / `workbenchIntentActionPolicy` / `workbenchAiIntentPlannerModel` / `useWorkbenchAiCommandIntents` / `useWorkbenchAiActionRouter` / `usePersonalWorkbenchAiMode`),确认高风险动作(删除/审核/驳回)一律 `requiresConfirmation` 且执行出口无 `execute_allowed`、政策类问题被挡在执行链路外、直接提交需二次确认——安全底线稳。
|
||||
- 修改①(低置信度反问):`workbenchAiIntentPlannerModel.js` 新增 `WORKBENCH_AI_INTENT_CONFIDENCE_THRESHOLD=0.6` 与 `isLowConfidenceTravelApplicationPlan`;规则兜底(rule_fallback)与显式 submit/save_draft 不计为低置信。`usePersonalWorkbenchAiMode.js` 在可执行 travel 计划前插入低置信分支,新增 `startModelPlannedTravelApplicationConfirmation` 与 `buildLowConfidenceTravelApplicationConfirmationText`,反问消息携带 `ai_application_confirm_intent` 动作。`useWorkbenchAiActionRouter.js` 新增 `ai_application_confirm_intent` 分支,还原 ontologyFields/提交标记后调用 `startAiApplicationPreview`。
|
||||
- 修改②(闲聊预筛):`shouldRequestWorkbenchAiIntentPlan` 增加业务关键词正则,「你好/谢谢/嗯/ok」等闲聊不再发起 35s 的模型规划请求,直接落到通用 steward 回复。
|
||||
- 修改③(报销兜底核查):复查确认 `executeModelPlannedWorkbenchIntent` 的 catch 分支不 return 时,`isReimbursementCreationIntent(cleanPrompt)` 在后续 823 行仍会被求值,报销兜底天然可达,无需新增重复分支,本次未改动。
|
||||
- 验证:`workbench-ai-intent-planner-model.test.mjs`(20/20,含新增 3 个用例)、`workbench-ai-application-gate-model.test.mjs`(5/5)、`workbench-intent-frame-model.test.mjs`(8/8)全绿;`expense-application-fast-preview.test.mjs` 既有 12 个失败(「小财管家」文案/表格渲染问题,与本次无关),本次改动额外使 `not ok 2 - AI workbench routes compact travel direct-submit planner` 由失败转通过,无新增失败。
|
||||
- 影响:模型给出低置信度差旅申请意图时不再直接建预览,先反问确认;闲聊类输入不再误触发模型规划,响应更快、减轻后端压力。
|
||||
- 局限:`agent-change-log` Skill 在当前环境不可调用,已按 AGENTS.md 规范手动增量更新本日志。
|
||||
|
||||
## 遗留问题
|
||||
|
||||
- 09:18:官方 `quick_validate.py` 仍因当前 Python 环境缺少 `PyYAML` 无法运行,已用 frontmatter、必需文件、占位符和 diff check 做人工兜底。建议后续统一为 skill 校验脚本补齐依赖或增加无 PyYAML 的轻量校验路径。
|
||||
- 09:23:当前环境没有找到 Skill Creator 的 `quick_validate.py` 脚本文件本体,因此本次继续采用人工兜底校验。建议后续恢复系统 Skill Creator 脚本路径,或把轻量校验脚本纳入仓库级工具。
|
||||
- 21:30:`expense-application-fast-preview.test.mjs` 仍有 12 个既有失败(文案「小财管家」「此意图系统不支持」与 markdown 表格整块渲染相关),与本次意图门控改动无关,建议单独排查。
|
||||
- 21:30:本次未纳入范围的三项已记录:时间过滤维度扩展(仅支持 N天前/昨天/今天)、排除词两处重复维护、`handleInlineDraftDeletionIntent` 命名与职责不符,建议后续分批处理。
|
||||
|
||||
## TODO
|
||||
|
||||
- [ ] 为 `quick_validate.py` 准备稳定运行环境,避免后续新增 Skill 时继续依赖人工兜底。(来源:09:18 技能校验)
|
||||
- [ ] 排查 `expense-application-fast-preview.test.mjs` 的 12 个既有失败(小财管家文案 / 表格整块渲染)。(来源:21:30 意图门控加固)
|
||||
- [ ] 评估意图门控剩余三项:时间过滤维度扩展、排除词常量抽取、`handleInlineDraftDeletionIntent` 重命名。(来源:21:30 意图门控加固)
|
||||
|
||||
Reference in New Issue
Block a user