diff --git a/.doc/audit/2026-09-25-dialogue-office-capability-research.md b/.doc/audit/2026-09-25-dialogue-office-capability-research.md new file mode 100644 index 00000000..f70c3a1c --- /dev/null +++ b/.doc/audit/2026-09-25-dialogue-office-capability-research.md @@ -0,0 +1,208 @@ +--- +title: "对话办公能力全景盘点" +created: 2026-09-25 +owner: Cursor +task_id: dialogue-office-expansion-2026-09-25 +policy_revision: cursor-governance-2026-09-24-r1 @ 44161d2ad2d7aada3e9ff88127b52148543278e5 +review_state: pending +integration_state: pending +deployment: not_required +cleanup: pending +remote_sync: not_requested +status: done +confidence: high +--- + +# 调研:对话办公能力全景盘点 + +## 范围与授权 + +- **用户目标**:以「对话辅助办公」为初衷,最大限度扩展对话可操作范围;**创建项目、添加成员、设置等治理结构操作保持 UI 专属**。 +- **本轮交付**:研究报告 + 分期整改计划(文档落盘);P0–P3 **实施另起任务**。 +- **允许写路径**:`.doc/audit`、`.doc/remediation`。 +- **基线 SHA**:`44161d2ad2d7aada3e9ff88127b52148543278e5`(建场时 local `dev`)。 +- **非目标**:不改产品代码、不更新 CURRENT/FEATURE-MATRIX/gap-matrix、不部署。 +- **整改方案**:[2026-09-25-dialogue-office-expansion-plan.md](../remediation/2026-09-25-dialogue-office-expansion-plan.md) + +## 结论 + +1. 注册表共 **32** 个 ActionKey(非早期估计的 34);主链路与 intentflow 计划执行面 **双轨脱节**:计划层 U11/U12 已把部分键 live 化,单意图协调层仍对认领/送审/工作流触发等返回「假成功」话术。 +2. HTTP **169** 条路由可按对话边界分为:可操作候选 **A=46**、只读查询 **B=66**、UI 专属写/管理台 **C=44**、平台基线 **13**。 +3. 消除假成功、打通 dry-run、接真实查询源、再扩新写意图,应按 P0→P3 分期;一律复用 doc-review 四道防线(识别分流 → 话语分类 → 角色×状态出卡 → 执行二次鉴权),两步确认 + 服务端权威校验。 + +## 证据 + +| 项 | 路径/命令 | 结果 | +|----|-----------|------| +| ActionKey SSOT | `internal/intent/registry.go` `registerBuiltinActions` L145–187 | **32** 键 | +| 主链 docgov | `internal/coordinator/engine_docgov.go` | claim/submit 假成功;approve/reject 有 PendingAction | +| 主链 workflow | `internal/coordinator/engine_workflow.go` | switch 确认闭环断裂;trigger 引导 UI | +| intentflow dry-run | `internal/app/intentflow/expansion.go` L195–216 | docgov 5 dry-run + run-control 2 dry-run | +| HTTP 路由 | `rg 'mux\.HandleFunc\("' internal/server/server.go internal/server/document_revision_handlers.go` | **169** | +| 样板 | doc-review-lifecycle `09fe9723`;`card_policy.go` / `recognizer_matchers_docgov.go` / `action_executor.go` | 四道防线可复用 | + +## 1. 意图执行矩阵(32 ActionKey) + +**执行类别说明** + +| 类别 | 含义 | +|------|------| +| `real-exec` | 协调层或 PendingAction 已调用领域服务真写 | +| `pending-action` / `confirm-card+pending` | 出确认卡或挂起期望,确认后 `action_executor` 真写 | +| `query-direct` | 只读查询,直接回复(可能含硬编码兜底) | +| `prose-only` | 仅自然语言,无业务副作用(或明确拒绝) | +| `假成功` | StatusAccepted/成功话术,但未调用权威写服务 | +| `dry-run` | intentflow Owner 返回 `validated_only` receipt,无副作用 | + +| ActionKey | 中文 | 主链类别 | 计划链(intentflow) | 主处理 | 后端 owner | +|-----------|------|----------|----------------------|--------|------------| +| `project.advisory` | 进展/风险查询 | query-direct | QueryOwner | `engine_query.go:handleQueryProgress` | 协调层/LLM | +| `project.fact.supplement` | 补充项目事实 | real-exec | Mutate(flag 下 dry→live) | `engine_stage.go:handleSupplementInfo` | ctxmgr / MutateOwner | +| `project.stage.advance` | 推进阶段 | real-exec / 无 runner 时 prose 模拟 | — | `engine_stage.go:handleAdvanceStage` | stageflow | +| `task.run` | 触发生成任务 | real-exec | TaskRunAdapter | `engine_task.go:handleTriggerTask` | stageflow / taskrun | +| `task.run.adhoc` | 特设任务 | real-exec | — | `engine_task.go:handleTriggerAdhocTask` | 同上 | +| `conversation.chat` | 闲聊 | prose-only | — | `engine_consult.go:handleCasualChat` | dialogue LLM | +| `conversation.decline` | 暂缓建议 | prose-only | — | `engine_stage.go:handleDeclineExpectation` | 上下文 | +| `document.claim` | 认领文档 | **假成功** | live(U11) | `engine_docgov.go:250–277` | 主链仅改 Claimed 列表;计划→docgov | +| `document.review.submit` | 提交审核 | **假成功** | live(U11) | `engine_docgov.go:280–295` | 主链纯文案;计划→`SubmitForReview` | +| `document.review.approve` | 审核通过 | pending-action | **dry-run** | `engine_docgov.go:handleDocGovApprove` | `docgov.ReviewApprove` | +| `document.review.reject` | 审核驳回 | confirm-card+pending | **dry-run** | `engine_docgov.go:handleDocGovReject` | `docgov.ReviewReject` | +| `document.final.approve` | 终审批准 | confirm-card+pending | **dry-run** | 同上 Approve 分支 | `docgov.ApproverApprove` | +| `document.final.reject` | 终审驳回 | confirm-card+pending | **dry-run** | 同 reject | 同上 | +| `document.proposal.decide` | 提案裁决 | confirm 分支真挂起 / **默认分支假成功** | **dry-run** | `engine_docgov.go:298+` | confirm_*→PendingAction | +| `regulation.query` | 法规查询 | query-direct | QueryOwner | `engine_query.go:handleQueryRegulations` | kb.Client + 模板兜底 | +| `case.query` | 相似案例 | query-direct | QueryOwner | `engine_query.go:handleQuerySimilarCases` | SearchSimilarCases + **硬编码案例** | +| `permission.query` | 权责查询 | query-direct | — | `engine_query.go:handleQueryUserRights` | UserDocs 上下文 | +| `document.reject_reason.query` | 驳回原因 | query-direct | — | `engine_query.go:handleQueryRejectReason` | 黑板 + default 文案 | +| `card.confirm` | 确认挂起期望 | confirm 元动作 | — | expectation 映射 | 路由至目标 intent | +| `project.stage.execute` | 阶段执行确认 | 注册有、switch **无独立 case** | — | 实际走 advance | 同 advance | +| `security.forbidden` | 安全禁止 | prose-only | RejectPlan | `engine_consult.go` | — | +| `workflow.switch` | 切换激活工作流 | **假成功(确认后无执行)** | **dry-run** | `engine_workflow.go:12–59` | **边界上属结构治理 → 宜诚实拒绝/引导 UI** | +| `workflow.run` | 运行工作流 | **假成功(引导 UI)** | live(U12) | `engine_workflow.go:62–90` | 计划→`CreateWorkflowRun` | +| `workflow.status.query` | 工作流状态 | query-direct | — | `engine_workflow.go:93` | UserProjectContext | +| `document.status.query` | 文档状态 | query-direct(常空模板) | — | `engine_workflow.go:117` | 模板/document_summary | +| `conversation.help` | 能力帮助 | query-direct | — | `engine_workflow.go:139` | AvailableActions | +| `conversation.unsupported` | 不支持 | prose-only | — | `engine_workflow.go:159` | — | +| `run.status.query` | 运行状态 | query-direct | — | `engine_run.go:handleRunStatusQuery` | WorkDir | +| `run.resume` | 续跑 | confirm-card+pending | live(U12) | `engine_run.go:handleRunResume` | taskrun | +| `run.restart` | 重启 | confirm-card+pending | **dry-run** | `engine_run.go:handleRunRestart` | taskrun.restart | +| `project.impact.analyze` | 影响分析 | query-direct | — | `impact_actions.go` | ImpactActions | +| `project.doc.revise_propose` | 修订提案 | confirm-card+pending | — | `impact_actions.go` | ProposeRevision | + +### 1.1 假成功清单(主链路优先) + +| # | Legacy / Key | 文件:行号 | 当前行为 | P0 建议 | +|---|--------------|-----------|----------|---------| +| 1 | `DOCGOV_CLAIM` / `document.claim` | `engine_docgov.go:250–277` | 仅 append `UserDocs.Claimed`,回复「已成功认领」,不调 docgov | 真执行 `RecordDocumentViewed`/claim API + 确认(若需) | +| 2 | `DOCGOV_SUBMIT_REVIEW` / `document.review.submit` | `engine_docgov.go:280–295` | 纯成功文案,无状态变更 | 真执行 `Gov.SubmitForReview` + 角色门禁 | +| 3 | `DOCGOV_PROPOSAL_DECIDE` 默认分支 | `engine_docgov.go:383–397` | 非 confirm_* 时按 proposal_action 返回采纳/拒绝文案,不写文档 | 默认分支诚实澄清或走确认卡;禁止假成功 | +| 4 | `SWITCH_WORKFLOW` / `workflow.switch` | `engine_workflow.go:12–59` | 设 NextExpectation 要求确认,**确认后无写路径** | **诚实拒绝**:属 UI 专属(`PUT …/active-workflow`);或确认后明确「请在设置面板操作」 | +| 5 | `TRIGGER_WORKFLOW` / `workflow.run` | `engine_workflow.go:62–90` | 「请在面板确认」话术,不创建 run | 确认卡 + `CreateWorkflowRun`(对齐 U12) | + +附带(非计划 P0 五处,但同类):无 runner 时 `ADVANCE_STAGE`/`TRIGGER_TASK` 模拟成功;`VIEW_DOC` lifecycle 空模板。 + +### 1.2 intentflow 仍 dry-run 的键 + +**DocGov**(`docGovActionKeys` 7 − `DocGovLiveActionKeys` 2 = **5**): + +- `document.review.approve` +- `document.review.reject` +- `document.final.approve` +- `document.final.reject` +- `document.proposal.decide` + +**Run-control**(4 − live `workflow.run`/`run.resume` = **2**): + +- `workflow.switch`(计划层 dry-run;产品边界建议永久不 live 写,改为拒绝) +- `run.restart` + +见 `internal/app/intentflow/expansion.go` L195–216;dry-run 行为 `DryRunAdapter.Execute` → `validated_only`。 + +## 2. HTTP 169 路由 × 对话边界 + +**统计口径**:`internal/server/server.go` `Routes()` + `document_revision_handlers.go` `registerDocumentRevisionRoutes()` 中 `mux.HandleFunc("METHOD path")` = **169**。不含中间件 OPTIONS、SPA 静态子路径。 + +| 类别 | 计数 | 含义 | +|------|-----:|------| +| **A 对话可操作候选** | 46 | 读写副作用;对话须两步确认后经服务层落库 | +| **B 只读查询候选** | 66 | GET + preview POST | +| **C UI 专属** | 44 | 治理结构写 + admin 全域(含管理台只读) | +| 平台基线 | 13 | health/ready、认证、SPA、`/me` 自服务 | +| **合计** | **169** | | + +### 2.1 A — 对话可操作候选(46) + +| 模块 | n | 代表路径 | 对话意图现状 | +|------|--:|----------|--------------| +| docgov | 11 | `POST …/docgov/{claim,submit-review,review-decision,approver-decision,proposal,proposal/decide,comments,content,lease/*}` | 批准/驳回已打通;claim/submit 主链假成功;comments 等偏 UI | +| docrevision | 2 | `PATCH …/documents/{id}/content` · `POST …/agent-candidates/{id}/decision` | 正文 PATCH 仅 HTTP;候选决策可对话扩展 | +| trace | 6 | `POST …/trace/{index,analyze}` · `…/edges/{id}/decision` · `…/reopen` · `…/recheck/…/clear` | 影响分析意图有;**边裁决/重开仅 HTTP** | +| 补充批次 | 1 | `POST …/supplement-impacts/{batch_id}/decision` | 补充意图有;批次确认可对话化 | +| 工作流运行(非结构) | 2 | `POST …/workflows/{key}/run` · `…/stages/{stage}/advance` | run 主链假成功;advance 有意图 | +| 任务执行 | 6 | `POST …/tasks/{run,run/stream,runs}` · `…/{cancel,resume}` | 触发/续跑已打通 | +| 对话写 | 8 | `POST …/chat*` | 会话基础设施 | +| 意图计划 | 1 | `POST …/intent-plans/{id}/decisions` | intentflow + HTTP 双通道 | +| 自由文档 | 6 | `POST/PUT/DELETE …/freeform-documents*` | **仅 HTTP** → P3 候选 | +| 资产 | 2 | `POST …/assets` · `…/reparse` | **仅 HTTP** → P3 | +| 通知 | 1 | `PATCH …/notifications/{id}` | **仅 HTTP** → P3 | +| 用户偏好 | 1 | `PUT …/context/user/preference` | 低优先级 | + +### 2.2 B — 只读查询候选(66) + +项目/工作流/成员/设置 **GET**、termination/activation **preview**、chat 历史检索、docgov audit/comments GET、修订 ledger GET、资产 raw、通知列表、context/cases 等。 + +对话已覆盖:进展、文档/工作流/运行态、驳回原因、法规/案例/权限(案例与进展有硬编码兜底)。 +仍偏 HTTP:职责现状、修订版本/diff、trace 图、终止预览、成员列表只读(允许对话只读引导,禁止代写)。 + +### 2.3 C — UI 专属红线(44,对话永久禁写) + +| 模块 | 写操作(禁入) | +|------|----------------| +| 项目/成员 | `POST /projects` · `POST|PUT|DELETE …/members` | +| 职责 | `PATCH …/doc-tasks/{taskKey}/duties` | +| 工作流结构/生命周期 | `PUT …/workflow-plan` · `PUT …/active-workflow` · `POST …/workflow-instances/activate` · `POST …/terminate` | +| Admin | 角色/用户/密码/工作流定义 publish·retire/模板/config/system settings/maintenance/workspaces cleanup | + +对话侧应对命中措辞走 `security.forbidden` / `conversation.unsupported`,**仅允许只读查询与引导**(如读职责现状、`termination-preview`)。 + +> **澄清**:`workflow.switch`(改 active-workflow)落入 C;`workflow.run`(创建运行实例)落入 A。P0 对前者诚实拒绝,对后者真执行。 + +## 3. 查询硬编码兜底 + +| 场景 | 位置 | 问题 | +|------|------|------| +| 相似案例 | `engine_query.go:420–426` | 无数据时硬编码 PRJ-2025-008 / PRJ-2024-019 | +| 驳回原因 | `engine_query.go:260–276` + `card_policy.go:defaultRejectReasonText` | 黑板/事件捞取失败则默认文案 | +| 法规 | `engine_query.go:382–388` | KB 空则 GB/YY 模板 | +| 进展简报 | `engine_query.go:83–164` | 默认项目名与长硬编码段落 | +| 文档状态 | `engine_workflow.go:126–129` | lifecycle 空 → 引导面板 | + +## 4. 复用样板:doc-review 四道防线 + +参考合入/分支证据:`feature/doc-review-lifecycle-2026-09-25` @ `09fe9723`(批注/重开/积压/送审真执行)。 + +| 防线 | 符号 | 要点 | +|------|------|------| +| ① 识别分流 | `recognizer_matchers_docgov.go:matchDocGovAction` | 查询语气不误路由写动作 | +| ② 话语分类 | `card_policy.go:ClassifyRejectUtterance`(Web 对称) | QUERY / EXECUTE / OTHER | +| ③ 角色×状态出卡 | `ResolveRejectCard` / `buildRejectConfirmCard` | 无权限不出危险按钮 | +| ④ 执行二次鉴权 | `handleDocGovReject/Approve` + `chat/action_executor.go` | 确认后调 `GovernanceEngine` | + +后续写意图扩展必须复制该模式,禁止「话术成功、服务未写」。 + +## 5. 开放问题 + +- `project.stage.execute` 注册未接线:是否删除或显式映射到 advance(实施期决定)。 +- 自由文档/通知/资产对话化的产品优先级与确认文案(P3 开工前再确认)。 +- `workflow.switch` 是否保留意图仅作「引导 UI」还是识别层直接 `unsupported`(推荐后者,减少假确认)。 + +## 建议动作 + +见整改计划 P0–P3;本调研 **status=done** 仅表示盘点可审,**不代表问题已修复**。 + +## 状态与交接 + +- 产物:本文 + [整改计划](../remediation/2026-09-25-dialogue-office-expansion-plan.md) +- 实施:另起 `feature/dialogue-office-p0-…` 等任务;每期独立验证与验收 +- CURRENT / MATRIX / gap-matrix:本轮不动 +- catalog:`feature=dialogue-office`,scope `.doc/audit`+`.doc/remediation`;与 `docgov` feature claim 硬冲突,故未占用 `docgov` 键 diff --git a/.doc/audit/INDEX.md b/.doc/audit/INDEX.md index ac9ceaa3..e032e980 100644 --- a/.doc/audit/INDEX.md +++ b/.doc/audit/INDEX.md @@ -13,6 +13,14 @@ ## 核心文档(按阅读顺序推荐) +### 对话办公能力全景盘点(2026-09-25) + +**文件**: [2026-09-25-dialogue-office-capability-research.md](./2026-09-25-dialogue-office-capability-research.md) + +**结论**: 32 ActionKey 双轨脱节(主链假成功 vs intentflow 部分 live);HTTP 169 = A46/B66/C44+基线13;治理结构写永久 UI 专属。整改见 P0–P3 计划。 + +**整改**: [对话办公扩展计划](../remediation/2026-09-25-dialogue-office-expansion-plan.md) · task `dialogue-office-expansion-2026-09-25` + ### 模块化重构方案审核检查清单(2026-09-23) **文件**: [2026-09-23-modular-refactor-plan-review-checklist.md](./2026-09-23-modular-refactor-plan-review-checklist.md) diff --git a/.doc/remediation/2026-09-25-dialogue-office-expansion-plan.md b/.doc/remediation/2026-09-25-dialogue-office-expansion-plan.md new file mode 100644 index 00000000..0f5f34da --- /dev/null +++ b/.doc/remediation/2026-09-25-dialogue-office-expansion-plan.md @@ -0,0 +1,204 @@ +--- +title: "对话办公能力扩展整改计划(P0–P3)" +status: planned +created: 2026-09-25 +updated: 2026-09-25 +owner: Cursor +task_id: dialogue-office-expansion-2026-09-25 +policy_revision: cursor-governance-2026-09-24-r1 @ 44161d2ad2d7aada3e9ff88127b52148543278e5 +review_state: pending +integration_state: pending +deployment: not_required +cleanup: pending +remote_sync: not_requested +--- + +# 对话办公能力扩展整改计划(P0–P3) + +## 背景 + +配套调研:[对话办公能力全景盘点](../audit/2026-09-25-dialogue-office-capability-research.md)。 + +系统初衷是「对话辅助办公」。盘点显示:主链路多处假成功、intentflow 7 键 dry-run、查询意图硬编码兜底、大量 HTTP 写能力尚未进入对话通道。本计划分期打通 **真实执行 + 两步确认**,同时守住 **治理结构 UI 专属** 红线。 + +**本文件只交付方案**;P0–P3 实施各自另起 worktree/任务,不得在本调研任务内改业务代码。 + +## 目标 + +1. 用户在对话中对「办公写操作」得到的回复与后端权威状态一致(无假成功)。 +2. 高风险写一律:识别分流 → 确认卡/PendingAction → `action_executor` / intentflow Owner → 领域服务二次鉴权。 +3. 创建项目、成员、职责改派、工作流规划/激活/终止、admin 全域:**对话永久禁写**(可只读引导)。 +4. 每期验收按 [验证契约](../ops/2026-09-21-validation-contract.md) 选层级;涉及产品 Agent 的写意图须真实 PI/对话全链路,禁止 stub 冒充 PASS。 + +## 边界红线(全期有效) + +| 禁写(UI 专属) | 对话允许 | +|-----------------|----------| +| `POST /projects`;成员增改删 | 只读列成员 / 引导「请在项目设置操作」 | +| `PATCH …/duties` | 只读职责现状 | +| `PUT workflow-plan` / `active-workflow`;activate / terminate 实例 | 只读计划、`termination-preview`、运行态查询 | +| Admin 全域写(角色/用户/密码/publish·retire/config/maintenance/cleanup) | 无;命中 → `security.forbidden` | +| 系统/项目设置写 | 只读 settings GET | + +**澄清**:`workflow.switch`(改激活工作流)∈ 禁写;`workflow.run`(创建运行)∈ 可对话操作。 + +## 复用样板(全期强制) + +参考 `feature/doc-review-lifecycle-2026-09-25` @ `09fe9723`: + +1. `recognizer_matchers_docgov.go` — 查询语气不进写路径 +2. `card_policy.go` — 话语分类 + 角色×状态出卡 +3. `engine_docgov.go` 确认分支 — PendingAction +4. `chat/action_executor.go` — 服务端二次鉴权后真写 + +新写意图禁止「Accepted + 成功文案」而无 GovernanceEngine / projectworkflow / taskrun 调用。 + +--- + +## P0 — 消除主链路假成功 + +### 范围 + +| 项 | Key | 动作 | +|----|-----|------| +| P0-1 | `document.claim` | 主链改调 docgov 真认领(对齐 intentflow U11 live);失败诚实报错 | +| P0-2 | `document.review.submit` | 主链改调 `SubmitForReview`;角色/状态门禁 | +| P0-3 | `document.proposal.decide` 默认分支 | 禁止假成功:缺确认则澄清卡;`confirm_*` 继续 PendingAction | +| P0-4 | `workflow.switch` | **诚实拒绝/引导 UI**(属 C 类);去掉「确认后我会切换」却无执行的期望环;识别层可映射 `unsupported` | +| P0-5 | `workflow.run` | 确认卡 + `CreateWorkflowRun`(对齐 U12);能力校验失败诚实拒绝 | + +不在 P0:intentflow dry-run 键(→P1);查询硬编码(→P2);新意图(→P3)。 + +### 涉及文件(预期) + +- `internal/coordinator/engine_docgov.go`(claim / submit / proposal decide) +- `internal/coordinator/engine_workflow.go`(switch / trigger) +- `internal/chat/action_executor.go`(若需新 PendingAction Kind) +- `internal/intent/recognizer_matchers_*.go` / `card_policy.go`(出卡与分流) +- 相关 `*_test.go`;必要时 Web `cardActionPolicy.ts` 对称 + +### 验收标准 + +- [ ] 五处路径:**无**「已成功」且领域状态未变的用例;失败返回明确 RejectReason +- [ ] claim/submit/run:真实环境对话两步确认后,HTTP GET / DB 可见状态变化 +- [ ] switch:用户说「切换工作流」→ 明确引导 UI,**不**产生假 Pending 成功 +- [ ] 回归:已有 approve/reject/final 确认卡路径不变坏 +- [ ] 按验证契约跑适用套件;产品写路径用真实对话链路,报告入 `.doc/test-reports/` + +### 交付终点 + +独立 feature 任务合入 local `dev`;本计划行标记 P0 `done`(实施任务更新,非本文自报)。 + +--- + +## P1 — intentflow dry-run 键 live 化 + +### 范围 + +将 `expansion.go` 中仍 dry-run 的键接到真实 Owner(与主链 PendingAction 语义对齐): + +**DocGov 5**:`document.review.approve` / `reject` / `final.approve` / `final.reject` / `document.proposal.decide` + +**Run-control**: + +- `run.restart` → live(taskrun.restart + 确认) +- `workflow.switch` → **不** live 写 active-workflow;改为 Authorize 硬拒绝或路由 unsupported(与 P0-4 一致) + +### 涉及文件(预期) + +- `internal/app/intentflow/expansion.go`(Live 集合 / OwnerMux) +- `internal/app/intentflow/docgov_owner.go`、`run_control_owner.go` +- `internal/sysadmin/features.go`(U11/U12 flag 说明若需更新) +- `expansion_test.go` 等 + +### 验收标准 + +- [ ] 上述 5 个 docgov 键在 flag 开启时产生真实 receipt(非 `validated_only`) +- [ ] `run.restart` live;`workflow.switch` 拒绝写且有稳定错误码 +- [ ] 计划执行与单意图主链对同一文档/运行:**最终状态一致** +- [ ] project 143 等既有 fail-closed 行为保留 + +--- + +## P2 — 查询意图接真实数据源 + +### 范围 + +| 查询 | 现状 | 目标 | +|------|------|------| +| `case.query` | 硬编码案例 | `ctxmgr.SearchSimilarCases` / KB;无数据诚实「暂无相似案例」 | +| `document.reject_reason.query` | 黑板 + default 文案 | 优先 `docgov` audit-logs / 文档状态上的驳回字段 | +| `document.status.query` | lifecycle 空模板 | 读 docgov document API / 摘要服务 | +| `run.status.query` / `workflow.status.query` | 上下文碎片 | 对齐 runs/instances GET 权威字段 | +| `project.advisory` 硬编码段落 | 默认项目名长模板 | 无简报时短诚实回复,禁止伪造项目事实 | + +### 涉及文件(预期) + +- `internal/coordinator/engine_query.go` +- `internal/coordinator/engine_workflow.go` / `engine_run.go` +- `internal/coordinator/card_policy.go`(`defaultRejectReasonText` 降级策略) +- 可选:薄封装读 repository,避免 coordinator 直接 SQL + +### 验收标准 + +- [ ] 无数据/无权限时:**不**返回伪造项目号或伪造驳回理由 +- [ ] 有数据时:与对应 GET API 字段一致(抽样对照) +- [ ] 单元测试覆盖空数据 / 有数据 / 权限不足 + +--- + +## P3 — 新写意图扩展(两步确认) + +每项均需:新或扩展 ActionKey(若必要)→ 识别 matcher → 确认卡 → PendingAction/Owner → 服务端校验。优先复用已有 HTTP handler 背后的领域服务,**对话不二次裸调 HTTP**。 + +| 优先级 | 能力 | HTTP 锚点 | 备注 | +|--------|------|-----------|------| +| P3-1 | Trace 边裁决 / reopen / recheck clear | `…/trace/…/decision` · `reopen` · `recheck/…/clear` | 高价值办公闭环 | +| P3-2 | 补充批次确认 | `…/supplement-impacts/{id}/decision` | 已有补充意图,补确认写 | +| P3-3 | 意图计划裁决(对话侧补齐提示) | `…/intent-plans/{id}/decisions` | 已有双通道,强化可发现性 | +| P3-4 | 批注查询 + 有限写(添加/解决) | `docgov/comments` | 生命周期 worktree 已有部分;扩展查询与误触防护 | +| P3-5 | 审计查询(只读意图) | `docgov/audit-logs` | 属查询增强,可与 P2 并行切片 | +| P3-6 | 资产重解析 | `…/assets/{id}/reparse` | 确认后调用 | +| P3-7 | 通知已读/处理 | `PATCH …/notifications/{id}` | 低风险 | +| P3-8 | 自由文档沉淀(from-message) | `freeform-documents/from-message` 等 | **不含**项目创建;分享策略需产品确认 | + +**明确不做(P3 也不做)**:成员/职责/项目创建/工作流规划发布/admin。 + +### 涉及文件(预期) + +- `internal/intent/registry.go` + matchers +- `internal/coordinator/engine_*.go`(新建 `engine_trace.go` 等按模块) +- `internal/chat/action_executor.go` +- `internal/app/intentflow/*`(若进计划执行面) +- Web 确认卡策略对称文件 + +### 验收标准 + +- [ ] 每能力:误触防护用例(查询语气不写、无权限无危险按钮、确认前无副作用) +- [ ] 真执行后权威状态可观测 +- [ ] 红线回归:说「创建项目/加成员/改设置」仍 forbidden/unsupported +- [ ] 真实 Agent 对话全链路报告 + +--- + +## 分期总表 + +| 期 | 主题 | 依赖 | 建议 mutex / feature | +|----|------|------|----------------------| +| P0 | 主链假成功 → 真执行/诚实拒绝 | 无 | `dialogue-office-p0` / 避开他人 `docgov` 硬 claim 或合并持有者 | +| P1 | intentflow 5+1 live(switch 拒绝) | P0 语义对齐更佳 | `dialogue-office-p1` | +| P2 | 查询真数据 | 可与 P1 并行(不同文件) | `dialogue-office-p2` | +| P3 | 新写意图 | P0 样板稳定后 | 按切片拆 task | + +## 验收总则 + +- 纯文档期(本任务):链接、taxonomy、git 差异;**NOT REQUIRED** 产品 PI。 +- 实施期:按验证契约矩阵选「对话写意图 / intentflow / 查询」行;报告 `.doc/test-reports/YYYY-MM-DD-dialogue-office-pN-…-test-report.md`。 +- 禁止用 dry-run receipt、SKIP、stub 作为交付 PASS。 + +## 相关链接 + +- Audit:[2026-09-25-dialogue-office-capability-research.md](../audit/2026-09-25-dialogue-office-capability-research.md) +- 样板任务:doc-review-lifecycle(批注/重开/积压/送审) +- 验证契约:[2026-09-21-validation-contract.md](../ops/2026-09-21-validation-contract.md) +- gap-matrix:本轮**不**新增发布 blocker(能力增强,非生产阻断);若实施中发现安全假成功升级为 blocker,再另案更新 diff --git a/.doc/remediation/INDEX.md b/.doc/remediation/INDEX.md index 1fe90ce8..257f244f 100644 --- a/.doc/remediation/INDEX.md +++ b/.doc/remediation/INDEX.md @@ -2,6 +2,7 @@ | 文档 | 说明 | |------|------| +| [2026-09-25-dialogue-office-expansion-plan.md](./2026-09-25-dialogue-office-expansion-plan.md) | 对话办公能力扩展 P0–P3:消除主链假成功、intentflow dry-run live、查询真数据源、新写意图(trace/补充确认/批注/资产等);治理结构 UI 专属。配套 [调研](../audit/2026-09-25-dialogue-office-capability-research.md)。planned,不实施代码 | | [2026-09-23-coordination-db-daemon-implementation-undertaking-plan.md](./2026-09-23-coordination-db-daemon-implementation-undertaking-plan.md) | 协调库与 daemon **实施承接计划**(工作包预填):W1–W3 七包(U1r/U2/U3/U7/U4/U5/U6)含符号级锚点、真实并发验收、mutex、开工准入;L2 仅 ADR 前置门。配套 [设计方案](./2026-09-23-coordination-db-daemon-plan.md) · [任务](../ops/short-term/2026-09-23-coordination-db-daemon-impl-plan.md)。planned,不实施代码 | | [2026-09-23-coordination-db-daemon-plan.md](./2026-09-23-coordination-db-daemon-plan.md) | 协调库与 daemon 分阶段方案:L1 单宿主机(复用 `.locks/state.sqlite` + claim/常驻入口/文档状态化);L2 跨机 PostgreSQL 仅 planned(需 ADR)。配套 [研究](../ops/research/2026-09-23-coordination-db-daemon-research.md) · [任务](../ops/short-term/2026-09-23-coordination-db-daemon.md)。U1 queue 子解析器已合入 `63e66c6f`;本文件 planned,不实施 daemon | | [2026-09-21-agent-lock-coordination-plan.md](./2026-09-21-agent-lock-coordination-plan.md) | Agent `.locks`、共享文档与并行工作流补充方案:本机 SQLite + 会话/租约/CAS;L1a–L1d 设计。配套 [研究](../ops/research/2026-09-21-agent-lock-coordination-research.md)。planned;跨机锁服务本期不采用 |