diff --git a/.doc/ops/short-term/2026-09-26-dialogue-ctx-closeout.md b/.doc/ops/short-term/2026-09-26-dialogue-ctx-closeout.md index 726e0f55..303553bb 100644 --- a/.doc/ops/short-term/2026-09-26-dialogue-ctx-closeout.md +++ b/.doc/ops/short-term/2026-09-26-dialogue-ctx-closeout.md @@ -56,13 +56,19 @@ ## 三、计划 1. [x] 分析进度(本文件§一) -2. [ ] 代码补齐 §2.1 + 单测 -3. [ ] 工程验证(vet/short/arch-check) -4. [ ] 候选集成 dev -5. [ ] dev rebuild + 迁移核验 + 真实 PI 落盘 + 冲突卡冒烟 -6. [ ] 测试报告 + 矩阵行更新(关闭条件满足则升 done,保留 before/after) -7. [ ] 任务收口 + worktree 清理 +2. [x] 代码补齐 §2.1 + 单测(dev `ebb82820`) +3. [x] 工程验证(vet/short/arch-check,候选验证收据) +4. [x] 候选集成 dev(`ebb82820`) +5. [x] dev runtime 启动(no-docker 单二进制,schema 73)+ 迁移核验 +6. [x] 真实 PI 落盘核验 + 冲突卡冒烟(含 sidecar 修复 `f89b946d` 后 completed run 全 PASS) +7. [x] 测试报告 + 矩阵行升 done + 任务收口 + worktree 清理 ## 四、结果登记 -(完成后回填) +- **review_state**: done(单测 + 工程门禁 + 候选验证收据) +- **integration_state**: done(dev `ebb82820` + `f89b946d`,均 --no-ff 候选集成) +- **deployment**: dev_runtime_verified(no-docker 单二进制 + localpg,schema 73;[health](../../test-reports/assets/2026-09-26-dialogue-ctx-closeout/dev-health.json)) +- **验证结论**:关闭条件全满足,见 [收口报告](../../test-reports/2026-09-26-dialogue-ctx-closeout-test-report.md) +- **cleanup**: 本任务 worktree 按门禁清理 +- **remote_sync**: not_requested(本地 dev 前进,未 push) +- **过程修复**:①冲突卡接线(expectations 丢弃→OnTerminal 投递+期望命中处理);②no-docker sidecar `PI_AGENT_EXTENSION` 覆盖;③本机 `.env` `PI_AGENT_BIN` macOS 路径纠正(非仓库变更) diff --git a/.doc/test-reports/2026-09-26-dialogue-ctx-closeout-test-report.md b/.doc/test-reports/2026-09-26-dialogue-ctx-closeout-test-report.md new file mode 100644 index 00000000..f5c2feec --- /dev/null +++ b/.doc/test-reports/2026-09-26-dialogue-ctx-closeout-test-report.md @@ -0,0 +1,82 @@ +# dialogue-ctx-injection 收口(dev 迁移 + 真实 PI 落盘 + 冲突确认卡冒烟)测试报告 + +## 一、测试背景 (Background) + +FEATURE-MATRIX `dialogue-ctx-injection` 行关闭条件:dev 迁移 goose 00071(实际编号 00072,因 maintenance-windows 占号顺延)+ 真实 PI 落盘核验 + 冲突确认卡冒烟。收口分析发现 trigger_user 路由的 PendingExpectation 在 `service_task_run.go` 调用点被丢弃,本轮先补齐接线(dev `ebb82820`)再验收;另修复 no-docker dev sidecar 任务路径硬编码容器扩展路径导致 PI 任务全挂的问题(dev `f89b946d`)。 + +## 二、测试目标 (Test Objectives) + +1. dev 环境应用迁移:`goose_db_version=73` 且 `context_conflict_adjudications` 可写 +2. 真实 PI 任务链路:清洗后对话注入小队工作区 `context/dialogue/`(五文件 + TASK.md 导航 + 权威度指引) +3. 冲突裁决入库:同级时间相近冲突 → `needs_confirm + trigger_user` 持久化 +4. 冲突确认卡冒烟:卡片到达触发用户会话;回复「确认」→ 期望命中、黑板同步、确认话术 + +## 三、测试方案与环境 (Test Plan & Environment) + +- 环境:本机 no-docker dev(`bin/agent-server` @ dev `f89b946d` + localpg managed PG18+pgvector + PI sidecar :18865,模型 MiniMax-M2.7-highspeed) +- 数据:新建项目 6633(zhanggong/uid10 创建,成员 11/12),main 工作流仅启用 `bd_intake`(author 10 / reviewer 11 / approver 12) +- 层级:真实产品链路(HTTP API + 真实 PI Agent Runner 任务执行) +- 证据:[assets/2026-09-26-dialogue-ctx-closeout/](./assets/2026-09-26-dialogue-ctx-closeout/) + +## 四、预期结果 (Expected Results) + +| # | 用例 | 预期 | +|---|---|---| +| 1 | dev health/迁移 | schema_version=73;adjudications 表存在 | +| 2 | 项目对话种子(5 条含 budget 冲突对) | 清洗保留事实轮;噪声/状态卡排除 | +| 3 | intake 任务(真实 PI) | run completed;workspace `context/dialogue/` 五文件;TASK.md 导航 | +| 4 | 冲突裁决 | budget=10万 vs 20万 → needs_confirm + trigger_user 入库 | +| 5 | 冲突确认卡 | 会话收到 CTX_CONFLICT_CARD 消息;「确认」→ EXPECTATION_HIT + 黑板更新 | + +## 五、实际测试结果与判定 (Actual Results & Evaluation) + +### 5.1 dev 迁移与就绪 + +- `GET /api/v1/health`:`schema_version=73`、database/events/kb ready=true([dev-health.json](./assets/2026-09-26-dialogue-ctx-closeout/dev-health.json))**PASS** +- `context_conflict_adjudications` 查询与写入成功(见 5.4)**PASS** + +### 5.2 真实 PI 任务落盘(run_1790372128945688932) + +- **输入**:`POST /api/v1/tasks/runs`(intake,项目 6633);真实 PI Runner 三步(organize/draft/review) +- **实际输出**:run **completed**;工作区 `intake_1790372128959911040`: + - `context/dialogue/{digest.md, turns.md, facts.json, CONFIRMATIONS.md, README.md}` 五文件齐备 + - digest.md:纳入 10 轮 / 噪声排除 14(状态卡等),覆盖窗口当日 + - facts.json:`customer_name`、`classification`、`budget`×2(冲突对)等事实抽出 + - 三个步骤 TASK.md 均含 `../../context/dialogue/` 导航行;`context/README.md` 含 collab_dialogue 权威度指引 + - 证据:[workspace-evidence.txt](./assets/2026-09-26-dialogue-ctx-closeout/workspace-evidence.txt) +- **判定**:**PASS** + +### 5.3 冲突确认卡冒烟(两次:失败 run 与 completed run 各一次) + +- **输入**:budget 冲突对(「预算大概10万」 vs 「预算还是要20万吧…」,30 分钟内、无明确证据词)→ 任务运行 +- **实际输出**: + - 会话收到 assistant 消息(intent=`CTX_CONFLICT_CARD`,branch=`EXPECTATION_HIT`):“⚠️ 检测到项目对话与现有事实存在说法冲突…回复「确认」采信推荐值(将同步项目黑板);回复「纠正」后直接告诉我正确的事实。”([06-chat-after-run2.json](./assets/2026-09-26-dialogue-ctx-closeout/06-chat-after-run2.json)) + - 回复「确认」→ `✅ 冲突确认完成:已按您的确认采信「budget」=「还是要20万吧…」,并同步项目黑板`(EXPECTATION_HIT → supplement-info 黑板路径;[07-confirm2.json](./assets/2026-09-26-dialogue-ctx-closeout/07-confirm2.json)) +- **判定**:**PASS**(任务失败路径与成功路径均能投递卡片——裁决与任务成败解耦) + +### 5.4 裁决入库 + +- `context_conflict_adjudications`:`run_1790371496904633435` 与 `run_1790372128945688932` 两行 `budget → needs_confirm / trigger_user`([adjudications-db.txt](./assets/2026-09-26-dialogue-ctx-closeout/adjudications-db.txt))**PASS** + +### 5.5 过程中修复(基础设施,非本行能力缺陷) + +1. **冲突卡接线缺失**(dev `ebb82820`):expectations 原被丢弃;现经 taskrun `OnTerminal`(exactly-once)投递 + `confirm_context_fact` 期望命中处理。 +2. **no-docker sidecar 任务路径**(dev `f89b946d`):runner.mjs 硬编码 `/app/extensions/tavily-search.mjs`,主机侧 PI 任务全部 spawn 失败;增加 `PI_AGENT_EXTENSION` 覆盖并在 start.sh 导出。另修正本机 `.env` 的 `PI_AGENT_BIN`(原为 macOS brew 路径,非仓库变更)。 + +## 六、自动化测试套件汇总 (Test Suite Execution) + +| 套件 | 结果 | +|---|---| +| `go test ./internal/bizdev/ ./internal/coordinator/ ./internal/taskrun/ ./internal/server/ -short` | PASS | +| `./scripts/arch-check.sh --mode block` | PASS(候选 `ebb82820` 与 `f89b946d`) | +| `go vet ./...` / `go test -short ./...` | PASS(候选验证收据) | +| 新增单测:bizdev 卡片投影/期望重建、coordinator 确认/纠正/回退、server 会话投递 | PASS | + +## 七、测试结论与后续优化建议 (Conclusion & Next Steps) + +**结论**:dialogue-ctx-injection 关闭条件全部满足——dev 迁移已应用并验证、真实 PI 任务链路完成 `context/dialogue/` 落盘核验、冲突确认卡冒烟(投递 + 确认闭环 + 黑板同步)PASS。FEATURE-MATRIX 行可升 `done`。 + +**备注与后续**: +- 会话内实时推送(SSE 通道主动推卡)未做,卡片以会话消息落盘呈现(刷新/历史可见);后续增强另立。 +- 「纠正」分支引导用户陈述正确值后由 SUPPLEMENT_INFO 吸收,本轮验收确认路径。 +- no-docker dev 的 compose 构建路径(dockerignore 排除 web/dist 导致 go:embed 失败)与单二进制路径并存,属环境形态差异,另行登记。 diff --git a/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/00-activate.json b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/00-activate.json new file mode 100644 index 00000000..0ff52b7e --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/00-activate.json @@ -0,0 +1,100 @@ +{ + "project_id": 6633, + "lifecycle_status": "active", + "active_workflow_key": "main", + "instance": { + "id": 367, + "project_id": 6633, + "workflow_version_id": 101, + "instance_no": 1, + "status": "active", + "config_revision": 2, + "plan_hash": "e21f2ed080702dc483607951c3b5a5ddf4478e87e3b6ca9ee82f013ae00e9365", + "config_snapshot": { + "workflow_definition_key": "main", + "workflow_version": 3, + "workflow_version_id": 101, + "stages": [ + { + "stage_key": "V0.1_triage", + "stage_name": "V0.1 需求摸底", + "enabled": true, + "doc_tasks": [ + { + "task_key": "bd_intake", + "task_title": "用户初始需求收集表", + "enabled": true, + "approval_configurable": true, + "duties": { + "author_user_id": 10, + "reviewer_user_id": 11, + "approver_user_id": 12 + } + } + ] + }, + { + "stage_key": "V0.5_feasibility", + "stage_name": "V0.5 方案与可行性", + "enabled": true, + "doc_tasks": [ + { + "task_key": "bd_feasibility_dev", + "task_title": "设计开发可行性评估报告", + "enabled": false, + "approval_configurable": true, + "duties": {} + }, + { + "task_key": "bd_feasibility_reg", + "task_title": "注册路径可行性评估报告", + "enabled": false, + "approval_configurable": true, + "duties": {} + }, + { + "task_key": "bd_prelim_design", + "task_title": "系统初步设计方案", + "enabled": false, + "approval_configurable": true, + "duties": {} + }, + { + "task_key": "bd_research", + "task_title": "调研报告", + "enabled": false, + "approval_configurable": true, + "duties": {} + }, + { + "task_key": "bd_user_requirements", + "task_title": "用户需求表", + "enabled": false, + "approval_configurable": true, + "duties": {} + } + ] + }, + { + "stage_key": "V1.0_quoting", + "stage_name": "V1.0 商务报价", + "enabled": true, + "doc_tasks": [ + { + "task_key": "bd_cdo_quote", + "task_title": "CDO 报价单", + "enabled": false, + "approval_configurable": true, + "duties": {} + } + ] + } + ] + }, + "activated_by": 10, + "activated_at": "2026-09-25T21:24:51.569007Z", + "created_by": 10, + "created_at": "2026-09-25T21:23:45.556244Z", + "updated_at": "2026-09-25T21:24:51.569007Z" + } +} \ No newline at end of file diff --git a/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/01-seed-chat.json b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/01-seed-chat.json new file mode 100644 index 00000000..c569eccc --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/01-seed-chat.json @@ -0,0 +1,32 @@ +[ + { + "msg": "我们这个项目主要面向三甲医院输液场景,临床反馈对流速精度要求比较高", + "http": 200, + "branch": "AMBIGUOUS_FALLBACK", + "reply_prefix": "完全理解您想再掂量一下。针对「dialogue-ctx收口验证-20260926」目前的节点,我帮您快速对照一下:\n\n• 若推进 V0.5(方案成型与法规对齐):\n 我可帮您梳理初步架构与注册分类路径,并预估型检成本,便于与客户深入沟通;" + }, + { + "msg": "上周和客户开过会,客户名称是协和医院,他们希望第二季度能拿到样品", + "http": 200, + "branch": "AMBIGUOUS_FALLBACK", + "reply_prefix": "完全理解您想再掂量一下。针对「dialogue-ctx收口验证-20260926」目前的节点,我帮您快速对照一下:\n\n• 若推进 V0.5(方案成型与法规对齐):\n 我可帮您梳理初步架构与注册分类路径,并预估型检成本,便于与客户深入沟通;" + }, + { + "msg": "注册分类是二类,走同品种临床评价路径,这个口径上次和法规老师确认过了", + "http": 200, + "branch": "AMBIGUOUS_FALLBACK", + "reply_prefix": "完全理解您想再掂量一下。针对「dialogue-ctx收口验证-20260926」目前的节点,我帮您快速对照一下:\n\n• 若推进 V0.5(方案成型与法规对齐):\n 我可帮您梳理初步架构与注册分类路径,并预估型检成本,便于与客户深入沟通;" + }, + { + "msg": "预算大概10万,先按这个数做初步方案", + "http": 200, + "branch": "AMBIGUOUS_FALLBACK", + "reply_prefix": "用户,您好!针对「dialogue-ctx收口验证-20260926」的系统验证方案(SVP)与型式检验要求,我为您梳理以下核心难点项目与特别注意事项:\n\n### 一、 核心测试难点项目\n\n1. **声学输出安全与探头表面温升极限(GB 9" + }, + { + "msg": "预算还是要20万吧,刚才和老板确认过范围包含型检", + "http": 200, + "branch": "NEW_INTENT_PREEMPT", + "reply_prefix": "用户,您好!针对「dialogue-ctx收口验证-20260926」的系统验证方案(SVP)与型式检验要求,我为您梳理以下核心难点项目与特别注意事项:\n\n### 一、 核心测试难点项目\n\n1. **声学输出安全与探头表面温升极限(GB 9" + } +] \ No newline at end of file diff --git a/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/02-run-terminal.json b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/02-run-terminal.json new file mode 100644 index 00000000..d7e3269f --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/02-run-terminal.json @@ -0,0 +1,23 @@ +{ + "run_id": "run_1790371496904633435", + "session_id": "sess-dctx-6633", + "project_id": 6633, + "user_id": 10, + "client_turn_id": "", + "idempotency_key": "", + "task_key": "intake", + "stage": "", + "workflow_instance_id": 367, + "stage_instance_id": 563, + "workflow_stage_key": "V0.1_triage", + "status": "failed", + "workspace_id": "/home/weichen/projects/Agent-System/data/dev/workspaces/bizdev/intake_1790371496919459054", + "assistant_message_id": 5117, + "worker_id": "", + "lease_expires_at": null, + "created_at": "2026-09-25T21:24:56.904635685Z", + "updated_at": "2026-09-25T21:24:56.934365142Z", + "error_message": "step step_01_organize failed: RUN_FAILED", + "attempt": 1, + "resumable": false +} \ No newline at end of file diff --git a/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/05-run2-terminal.json b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/05-run2-terminal.json new file mode 100644 index 00000000..875b018c --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/05-run2-terminal.json @@ -0,0 +1,23 @@ +{ + "run_id": "run_1790372128945688932", + "session_id": "sess-dctx-6633", + "project_id": 6633, + "user_id": 10, + "client_turn_id": "", + "idempotency_key": "", + "task_key": "intake", + "stage": "", + "workflow_instance_id": 367, + "stage_instance_id": 563, + "workflow_stage_key": "V0.1_triage", + "status": "completed", + "workspace_id": "/home/weichen/projects/Agent-System/data/dev/workspaces/bizdev/intake_1790372128959911040", + "assistant_message_id": 5130, + "worker_id": "", + "lease_expires_at": null, + "created_at": "2026-09-25T21:35:28.945690762Z", + "updated_at": "2026-09-25T21:41:16.724742208Z", + "error_message": "", + "attempt": 1, + "resumable": false +} \ No newline at end of file diff --git a/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/06-chat-after-run2.json b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/06-chat-after-run2.json new file mode 100644 index 00000000..f5a552c9 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/06-chat-after-run2.json @@ -0,0 +1,16 @@ +{ + "count": 38, + "cards_n": 2, + "last_card": { + "id": 5131, + "session_id": "sess-dctx-6633", + "user_id": 0, + "role": "assistant", + "content": "⚠️ 检测到项目对话与现有事实存在说法冲突,需要您确认:\n\n1. 对话与现有事实对「budget」说法不一致。推荐采信:还是要20万吧,刚才和老板确认过范围包含型检。请确认或纠正。\n 推荐采信:budget = 还是要20万吧,刚才和老板确认过范围包含型检\n 依据:同级时间相近且无明确证据,需人工确认\n\n回复「确认」采信推荐值(将同步项目黑板);回复「纠正」后直接告诉我正确的事实。", + "intent": "CTX_CONFLICT_CARD", + "branch": "EXPECTATION_HIT", + "day_key": "", + "category": "", + "created_at": "2026-09-25T21:41:16.723375Z" + } +} \ No newline at end of file diff --git a/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/07-confirm2.json b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/07-confirm2.json new file mode 100644 index 00000000..2e3cbea1 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/07-confirm2.json @@ -0,0 +1,395 @@ +{ + "http": 200, + "resp": { + "reply_text": "✅ 冲突确认完成:已按您的确认采信「budget」=「还是要20万吧,刚才和老板确认过范围包含型检」,并同步项目黑板。\n\n已收到并为您记录最新信息:「budget」已更新为「还是要20万吧,刚才和老板确认过范围包含型检」。\n这些事实已沉淀至项目黑板,后续论证与核价将直接吸收这些设定。\n\n针对「dialogue-ctx收口验证-20260926」,我为您梳理了接下来的推进选项:\n[1] 进入 V0.5 方案成型与法规对齐 (推荐,可直接回复“好”或“1”)\n[2] 补充或微调事实信息 \n[3] 查阅当前立项成熟度与对外沟通建议 \n", + "branch": "EXPECTATION_HIT", + "intent_result": { + "raw_input": "确认", + "top_intent": { + "intent": "CONFIRM_ACTION", + "confidence": 1, + "branch": "EXPECTATION_HIT", + "filled_slots": { + "fact_key": "budget", + "target_action": "confirm_context_fact", + "value": "还是要20万吧,刚才和老板确认过范围包含型检" + }, + "reasoning": "用户明确肯定上一轮参谋建议动作 [accept_winning: 采信 budget=还是要20万吧,刚才和老板确认过范围包含型检]", + "matched_option": { + "option_id": "accept_winning", + "title": "采信 budget=还是要20万吧,刚才和老板确认过范围包含型检", + "intent": "CONFIRM_ACTION", + "slots": { + "fact_key": "budget", + "value": "还是要20万吧,刚才和老板确认过范围包含型检" + } + } + }, + "candidates": [ + { + "intent": "CONFIRM_ACTION", + "confidence": 1, + "branch": "EXPECTATION_HIT", + "filled_slots": { + "fact_key": "budget", + "target_action": "confirm_context_fact", + "value": "还是要20万吧,刚才和老板确认过范围包含型检" + }, + "reasoning": "用户明确肯定上一轮参谋建议动作 [accept_winning: 采信 budget=还是要20万吧,刚才和老板确认过范围包含型检]", + "matched_option": { + "option_id": "accept_winning", + "title": "采信 budget=还是要20万吧,刚才和老板确认过范围包含型检", + "intent": "CONFIRM_ACTION", + "slots": { + "fact_key": "budget", + "value": "还是要20万吧,刚才和老板确认过范围包含型检" + } + } + } + ], + "context_snapshot_id": "ctx_1790370770364969745", + "requires_clarifying": false, + "branch": "EXPECTATION_HIT", + "shadow_score": 1, + "shadow_dialogue_act": "confirm", + "shadow_decision_hint": "allowed", + "intent_frame_v2": { + "version": "v2.0", + "action_key": "card.confirm", + "domain": "conversation", + "object": "system_ui", + "goal": "decide", + "dialogue_act": "confirm", + "slots": { + "fact_key": { + "value": "budget", + "source": "rule" + }, + "target_action": { + "value": "confirm_context_fact", + "source": "rule" + }, + "value": { + "value": "还是要20万吧,刚才和老板确认过范围包含型检", + "source": "rule" + } + }, + "relation": "expectation_hit", + "evidence": [ + { + "kind": "rule_match", + "detail": "用户明确肯定上一轮参谋建议动作 [accept_winning: 采信 budget=还是要20万吧,刚才和老板确认过范围包含型检]", + "weight": 1 + }, + { + "kind": "dialogue_act", + "detail": "confirm", + "weight": 0.1 + } + ], + "score": 1, + "legacy_intent": "CONFIRM_ACTION" + }, + "ranked_frames": { + "candidates": [ + { + "version": "v2.0", + "action_key": "card.confirm", + "domain": "conversation", + "object": "system_ui", + "goal": "decide", + "dialogue_act": "confirm", + "slots": { + "fact_key": { + "value": "budget", + "source": "rule" + }, + "target_action": { + "value": "confirm_context_fact", + "source": "rule" + }, + "value": { + "value": "还是要20万吧,刚才和老板确认过范围包含型检", + "source": "rule" + } + }, + "relation": "expectation_hit", + "evidence": [ + { + "kind": "rule_match", + "detail": "用户明确肯定上一轮参谋建议动作 [accept_winning: 采信 budget=还是要20万吧,刚才和老板确认过范围包含型检]", + "weight": 1 + } + ], + "score": 1, + "legacy_intent": "CONFIRM_ACTION" + } + ], + "top_margin": 0 + }, + "plan_proposal": { + "segmenter_version": "segmenter.v2", + "digest": "f6233706dd88a25413e8ade5bf38711f92d7167f0f9630fc0407408643155052", + "combo_hint": "single", + "segments": [ + { + "step_id": "1", + "text": "确认", + "normalized": "确认", + "span": { + "start": 0, + "end": 6 + }, + "evidence": "single", + "structure_confidence": "high", + "frame": { + "version": "v2.0", + "action_key": "card.confirm", + "domain": "conversation", + "object": "system_ui", + "goal": "decide", + "dialogue_act": "confirm", + "slots": { + "fact_key": { + "value": "budget", + "source": "rule" + }, + "target_action": { + "value": "confirm_context_fact", + "source": "rule" + }, + "value": { + "value": "还是要20万吧,刚才和老板确认过范围包含型检", + "source": "rule" + } + }, + "relation": "expectation_hit", + "evidence": [ + { + "kind": "rule_match", + "detail": "用户明确肯定上一轮参谋建议动作 [accept_winning: 采信 budget=还是要20万吧,刚才和老板确认过范围包含型检]", + "weight": 1 + }, + { + "kind": "dialogue_act", + "detail": "confirm", + "weight": 0.1 + } + ], + "score": 1, + "legacy_intent": "CONFIRM_ACTION" + } + } + ], + "evidence": [ + { + "kind": "segmenter", + "detail": "segmenter.v2", + "weight": 1 + }, + { + "kind": "split", + "detail": "single", + "weight": 0.5 + } + ] + }, + "plan_shadow": { + "enabled": true, + "segmenter_version": "segmenter.v2", + "segment_count": 1, + "digest": "f6233706dd88a25413e8ade5bf38711f92d7167f0f9630fc0407408643155052", + "combo_hint": "single", + "legacy_plan_attached": false, + "legacy_dropped_write": true, + "counterfactual_auto_read": "would_confirm" + } + }, + "coordination_result": { + "status": "ACCEPTED", + "intent": "CONFIRM_ACTION", + "branch": "EXPECTATION_HIT", + "natural_reply": "✅ 冲突确认完成:已按您的确认采信「budget」=「还是要20万吧,刚才和老板确认过范围包含型检」,并同步项目黑板。\n\n已收到并为您记录最新信息:「budget」已更新为「还是要20万吧,刚才和老板确认过范围包含型检」。\n这些事实已沉淀至项目黑板,后续论证与核价将直接吸收这些设定。\n\n针对「dialogue-ctx收口验证-20260926」,我为您梳理了接下来的推进选项:\n[1] 进入 V0.5 方案成型与法规对齐 (推荐,可直接回复“好”或“1”)\n[2] 补充或微调事实信息 \n[3] 查阅当前立项成熟度与对外沟通建议 \n", + "updated_context": { + "version": 73, + "snapshot_id": "ctx_1790370770364969745", + "assembled_at": "2026-09-25T21:12:50.364972515Z", + "user": { + "id": "u_sess-dctx-6633", + "name": "用户", + "role": "engineer", + "project_role": "composer" + }, + "project": { + "id": "", + "name": "dialogue-ctx收口验证-20260926", + "customer_name": "水木东方客户", + "device_type": "一次性使用输液器", + "intended_use": "", + "target_market": "国内", + "active_workflow_key": "main", + "current_workflow": "intake", + "current_stage": "V0.1_triage" + }, + "user_docs": { + "composed": null, + "reviewed": null, + "approved": null, + "claimed": null + }, + "pending": {}, + "blackboard_facts": { + "budget": "还是要20万吧,刚才和老板确认过范围包含型检", + "device_type": "一次性使用输液器", + "target_market": "国内" + }, + "pending_expectation": { + "expires_at": "0001-01-01T00:00:00Z", + "context_snippet": "项目「dialogue-ctx收口验证-20260926」当前处于初始摸底期,基准产品画像已梳理完成。", + "default_option": { + "option_id": "1", + "title": "进入 V0.5 方案成型与法规对齐", + "description": "自动比选技术路线,并梳理分类路径与型检标准", + "intent": "ADVANCE_STAGE", + "slots": { + "target_stage": "V0.5_feasibility" + } + }, + "options": [ + { + "option_id": "1", + "title": "进入 V0.5 方案成型与法规对齐", + "description": "自动比选技术路线,并梳理分类路径与型检标准", + "intent": "ADVANCE_STAGE", + "slots": { + "target_stage": "V0.5_feasibility" + } + }, + { + "option_id": "2", + "title": "补充或微调事实信息", + "description": "随时告知我客户的最新的预算、目标市场或使用场景", + "intent": "SUPPLEMENT_INFO" + }, + { + "option_id": "3", + "title": "查阅当前立项成熟度与对外沟通建议", + "description": "获取进展研判与对外商务沟通话术", + "intent": "QUERY_PROGRESS", + "slots": { + "query_topic": "all" + } + } + ], + "allow_affirmative": true, + "created_at": "2026-09-25T21:41:32.051327995Z" + }, + "available_actions": [ + "QUERY_PROGRESS", + "SUPPLEMENT_INFO", + "VIEW_DOC", + "TRIGGER_TASK:intake", + "ADVANCE_STAGE:V0.5_feasibility" + ], + "task_state": { + "active_task": "CONFIRM_ACTION", + "topic_anchor": "请用一句话说明当前项目所处阶段和下一步建议(关于上海今天热不热)(关于你好)(关于确认)", + "collected_slots": { + "fact_key": "budget", + "query_topic": "testing_analysis", + "target_action": "confirm_context_fact", + "value": "还是要20万吧,刚才和老板确认过范围包含型检" + }, + "missing_slots": [ + "device_type", + "target_market", + "budget" + ], + "updated_at": "2026-09-25T21:41:32.050808211Z" + } + }, + "next_expectation": { + "expires_at": "0001-01-01T00:00:00Z", + "context_snippet": "项目「dialogue-ctx收口验证-20260926」当前处于初始摸底期,基准产品画像已梳理完成。", + "default_option": { + "option_id": "1", + "title": "进入 V0.5 方案成型与法规对齐", + "description": "自动比选技术路线,并梳理分类路径与型检标准", + "intent": "ADVANCE_STAGE", + "slots": { + "target_stage": "V0.5_feasibility" + } + }, + "options": [ + { + "option_id": "1", + "title": "进入 V0.5 方案成型与法规对齐", + "description": "自动比选技术路线,并梳理分类路径与型检标准", + "intent": "ADVANCE_STAGE", + "slots": { + "target_stage": "V0.5_feasibility" + } + }, + { + "option_id": "2", + "title": "补充或微调事实信息", + "description": "随时告知我客户的最新的预算、目标市场或使用场景", + "intent": "SUPPLEMENT_INFO" + }, + { + "option_id": "3", + "title": "查阅当前立项成熟度与对外沟通建议", + "description": "获取进展研判与对外商务沟通话术", + "intent": "QUERY_PROGRESS", + "slots": { + "query_topic": "all" + } + } + ], + "allow_affirmative": true, + "created_at": "2026-09-25T21:41:32.051327995Z" + } + }, + "pending_expectation": { + "expires_at": "0001-01-01T00:00:00Z", + "context_snippet": "项目「dialogue-ctx收口验证-20260926」当前处于初始摸底期,基准产品画像已梳理完成。", + "default_option": { + "option_id": "1", + "title": "进入 V0.5 方案成型与法规对齐", + "description": "自动比选技术路线,并梳理分类路径与型检标准", + "intent": "ADVANCE_STAGE", + "slots": { + "target_stage": "V0.5_feasibility" + } + }, + "options": [ + { + "option_id": "1", + "title": "进入 V0.5 方案成型与法规对齐", + "description": "自动比选技术路线,并梳理分类路径与型检标准", + "intent": "ADVANCE_STAGE", + "slots": { + "target_stage": "V0.5_feasibility" + } + }, + { + "option_id": "2", + "title": "补充或微调事实信息", + "description": "随时告知我客户的最新的预算、目标市场或使用场景", + "intent": "SUPPLEMENT_INFO" + }, + { + "option_id": "3", + "title": "查阅当前立项成熟度与对外沟通建议", + "description": "获取进展研判与对外商务沟通话术", + "intent": "QUERY_PROGRESS", + "slots": { + "query_topic": "all" + } + } + ], + "allow_affirmative": true, + "created_at": "2026-09-25T21:41:32.051327995Z" + } + } +} \ No newline at end of file diff --git a/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/adjudications-db.txt b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/adjudications-db.txt new file mode 100644 index 00000000..65289620 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/adjudications-db.txt @@ -0,0 +1,6 @@ + task_run_id | fact_key | resolution | hitl_route | winning_value | decided_by | created_at +-------------------------+----------+---------------+--------------+--------------------------------------------+------------+------------------------------- + run_1790371496904633435 | budget | needs_confirm | trigger_user | 还是要20万吧,刚才和老板确认过范围包含型检 | rule | 2026-09-25 21:24:56.91903+00 + run_1790372128945688932 | budget | needs_confirm | trigger_user | 还是要20万吧,刚才和老板确认过范围包含型检 | rule | 2026-09-25 21:35:28.959449+00 +(2 rows) + diff --git a/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/confirm-resp.json b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/confirm-resp.json new file mode 100644 index 00000000..586f18f6 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/confirm-resp.json @@ -0,0 +1 @@ +{"reply_text":"✅ 冲突确认完成:已按您的确认采信「budget」=「还是要20万吧,刚才和老板确认过范围包含型检」,并同步项目黑板。\n\n已收到并为您记录最新信息:「budget」已更新为「还是要20万吧,刚才和老板确认过范围包含型检」。\n这些事实已沉淀至项目黑板,后续论证与核价将直接吸收这些设定。\n\n针对「dialogue-ctx收口验证-20260926」,我为您梳理了接下来的推进选项:\n[1] 进入 V0.5 方案成型与法规对齐 (推荐,可直接回复“好”或“1”)\n[2] 补充或微调事实信息 \n[3] 查阅当前立项成熟度与对外沟通建议 \n","branch":"EXPECTATION_HIT","intent_result":{"raw_input":"确认","top_intent":{"intent":"CONFIRM_ACTION","confidence":1,"branch":"EXPECTATION_HIT","filled_slots":{"fact_key":"budget","target_action":"confirm_context_fact","value":"还是要20万吧,刚才和老板确认过范围包含型检"},"reasoning":"用户明确肯定上一轮参谋建议动作 [accept_winning: 采信 budget=还是要20万吧,刚才和老板确认过范围包含型检]","matched_option":{"option_id":"accept_winning","title":"采信 budget=还是要20万吧,刚才和老板确认过范围包含型检","intent":"CONFIRM_ACTION","slots":{"fact_key":"budget","value":"还是要20万吧,刚才和老板确认过范围包含型检"}}},"candidates":[{"intent":"CONFIRM_ACTION","confidence":1,"branch":"EXPECTATION_HIT","filled_slots":{"fact_key":"budget","target_action":"confirm_context_fact","value":"还是要20万吧,刚才和老板确认过范围包含型检"},"reasoning":"用户明确肯定上一轮参谋建议动作 [accept_winning: 采信 budget=还是要20万吧,刚才和老板确认过范围包含型检]","matched_option":{"option_id":"accept_winning","title":"采信 budget=还是要20万吧,刚才和老板确认过范围包含型检","intent":"CONFIRM_ACTION","slots":{"fact_key":"budget","value":"还是要20万吧,刚才和老板确认过范围包含型检"}}}],"context_snapshot_id":"ctx_1790370770364969745","requires_clarifying":false,"branch":"EXPECTATION_HIT","shadow_score":1,"shadow_dialogue_act":"confirm","shadow_decision_hint":"allowed","intent_frame_v2":{"version":"v2.0","action_key":"card.confirm","domain":"conversation","object":"system_ui","goal":"decide","dialogue_act":"confirm","slots":{"fact_key":{"value":"budget","source":"rule"},"target_action":{"value":"confirm_context_fact","source":"rule"},"value":{"value":"还是要20万吧,刚才和老板确认过范围包含型检","source":"rule"}},"relation":"expectation_hit","evidence":[{"kind":"rule_match","detail":"用户明确肯定上一轮参谋建议动作 [accept_winning: 采信 budget=还是要20万吧,刚才和老板确认过范围包含型检]","weight":1},{"kind":"dialogue_act","detail":"confirm","weight":0.1}],"score":1,"legacy_intent":"CONFIRM_ACTION"},"ranked_frames":{"candidates":[{"version":"v2.0","action_key":"card.confirm","domain":"conversation","object":"system_ui","goal":"decide","dialogue_act":"confirm","slots":{"fact_key":{"value":"budget","source":"rule"},"target_action":{"value":"confirm_context_fact","source":"rule"},"value":{"value":"还是要20万吧,刚才和老板确认过范围包含型检","source":"rule"}},"relation":"expectation_hit","evidence":[{"kind":"rule_match","detail":"用户明确肯定上一轮参谋建议动作 [accept_winning: 采信 budget=还是要20万吧,刚才和老板确认过范围包含型检]","weight":1}],"score":1,"legacy_intent":"CONFIRM_ACTION"}],"top_margin":0},"plan_proposal":{"segmenter_version":"segmenter.v2","digest":"f6233706dd88a25413e8ade5bf38711f92d7167f0f9630fc0407408643155052","combo_hint":"single","segments":[{"step_id":"1","text":"确认","normalized":"确认","span":{"start":0,"end":6},"evidence":"single","structure_confidence":"high","frame":{"version":"v2.0","action_key":"card.confirm","domain":"conversation","object":"system_ui","goal":"decide","dialogue_act":"confirm","slots":{"fact_key":{"value":"budget","source":"rule"},"target_action":{"value":"confirm_context_fact","source":"rule"},"value":{"value":"还是要20万吧,刚才和老板确认过范围包含型检","source":"rule"}},"relation":"expectation_hit","evidence":[{"kind":"rule_match","detail":"用户明确肯定上一轮参谋建议动作 [accept_winning: 采信 budget=还是要20万吧,刚才和老板确认过范围包含型检]","weight":1},{"kind":"dialogue_act","detail":"confirm","weight":0.1}],"score":1,"legacy_intent":"CONFIRM_ACTION"}}],"evidence":[{"kind":"segmenter","detail":"segmenter.v2","weight":1},{"kind":"split","detail":"single","weight":0.5}]},"plan_shadow":{"enabled":true,"segmenter_version":"segmenter.v2","segment_count":1,"digest":"f6233706dd88a25413e8ade5bf38711f92d7167f0f9630fc0407408643155052","combo_hint":"single","legacy_plan_attached":false,"legacy_dropped_write":true,"counterfactual_auto_read":"would_confirm"}},"coordination_result":{"status":"ACCEPTED","intent":"CONFIRM_ACTION","branch":"EXPECTATION_HIT","natural_reply":"✅ 冲突确认完成:已按您的确认采信「budget」=「还是要20万吧,刚才和老板确认过范围包含型检」,并同步项目黑板。\n\n已收到并为您记录最新信息:「budget」已更新为「还是要20万吧,刚才和老板确认过范围包含型检」。\n这些事实已沉淀至项目黑板,后续论证与核价将直接吸收这些设定。\n\n针对「dialogue-ctx收口验证-20260926」,我为您梳理了接下来的推进选项:\n[1] 进入 V0.5 方案成型与法规对齐 (推荐,可直接回复“好”或“1”)\n[2] 补充或微调事实信息 \n[3] 查阅当前立项成熟度与对外沟通建议 \n","updated_context":{"version":49,"snapshot_id":"ctx_1790370770364969745","assembled_at":"2026-09-25T21:12:50.364972515Z","user":{"id":"u_sess-dctx-6633","name":"用户","role":"engineer","project_role":"composer"},"project":{"id":"","name":"dialogue-ctx收口验证-20260926","customer_name":"水木东方客户","device_type":"一次性使用输液器","intended_use":"","target_market":"国内","active_workflow_key":"main","current_workflow":"intake","current_stage":"V0.1_triage"},"user_docs":{"composed":null,"reviewed":null,"approved":null,"claimed":null},"pending":{},"blackboard_facts":{"budget":"还是要20万吧,刚才和老板确认过范围包含型检","device_type":"一次性使用输液器","target_market":"国内"},"pending_expectation":{"expires_at":"0001-01-01T00:00:00Z","context_snippet":"项目「dialogue-ctx收口验证-20260926」当前处于初始摸底期,基准产品画像已梳理完成。","default_option":{"option_id":"1","title":"进入 V0.5 方案成型与法规对齐","description":"自动比选技术路线,并梳理分类路径与型检标准","intent":"ADVANCE_STAGE","slots":{"target_stage":"V0.5_feasibility"}},"options":[{"option_id":"1","title":"进入 V0.5 方案成型与法规对齐","description":"自动比选技术路线,并梳理分类路径与型检标准","intent":"ADVANCE_STAGE","slots":{"target_stage":"V0.5_feasibility"}},{"option_id":"2","title":"补充或微调事实信息","description":"随时告知我客户的最新的预算、目标市场或使用场景","intent":"SUPPLEMENT_INFO"},{"option_id":"3","title":"查阅当前立项成熟度与对外沟通建议","description":"获取进展研判与对外商务沟通话术","intent":"QUERY_PROGRESS","slots":{"query_topic":"all"}}],"allow_affirmative":true,"created_at":"2026-09-25T21:26:17.00202037Z"},"available_actions":["QUERY_PROGRESS","SUPPLEMENT_INFO","VIEW_DOC","TRIGGER_TASK:intake","ADVANCE_STAGE:V0.5_feasibility"],"task_state":{"active_task":"CONFIRM_ACTION","topic_anchor":"预算还是要20万吧,刚才和老板确认过范围包含型检(关于确认)","collected_slots":{"fact_key":"budget","query_topic":"testing_analysis","target_action":"confirm_context_fact","value":"还是要20万吧,刚才和老板确认过范围包含型检"},"missing_slots":["device_type","target_market","budget"],"updated_at":"2026-09-25T21:26:17.001134537Z"}},"next_expectation":{"expires_at":"0001-01-01T00:00:00Z","context_snippet":"项目「dialogue-ctx收口验证-20260926」当前处于初始摸底期,基准产品画像已梳理完成。","default_option":{"option_id":"1","title":"进入 V0.5 方案成型与法规对齐","description":"自动比选技术路线,并梳理分类路径与型检标准","intent":"ADVANCE_STAGE","slots":{"target_stage":"V0.5_feasibility"}},"options":[{"option_id":"1","title":"进入 V0.5 方案成型与法规对齐","description":"自动比选技术路线,并梳理分类路径与型检标准","intent":"ADVANCE_STAGE","slots":{"target_stage":"V0.5_feasibility"}},{"option_id":"2","title":"补充或微调事实信息","description":"随时告知我客户的最新的预算、目标市场或使用场景","intent":"SUPPLEMENT_INFO"},{"option_id":"3","title":"查阅当前立项成熟度与对外沟通建议","description":"获取进展研判与对外商务沟通话术","intent":"QUERY_PROGRESS","slots":{"query_topic":"all"}}],"allow_affirmative":true,"created_at":"2026-09-25T21:26:17.00202037Z"}},"pending_expectation":{"expires_at":"0001-01-01T00:00:00Z","context_snippet":"项目「dialogue-ctx收口验证-20260926」当前处于初始摸底期,基准产品画像已梳理完成。","default_option":{"option_id":"1","title":"进入 V0.5 方案成型与法规对齐","description":"自动比选技术路线,并梳理分类路径与型检标准","intent":"ADVANCE_STAGE","slots":{"target_stage":"V0.5_feasibility"}},"options":[{"option_id":"1","title":"进入 V0.5 方案成型与法规对齐","description":"自动比选技术路线,并梳理分类路径与型检标准","intent":"ADVANCE_STAGE","slots":{"target_stage":"V0.5_feasibility"}},{"option_id":"2","title":"补充或微调事实信息","description":"随时告知我客户的最新的预算、目标市场或使用场景","intent":"SUPPLEMENT_INFO"},{"option_id":"3","title":"查阅当前立项成熟度与对外沟通建议","description":"获取进展研判与对外商务沟通话术","intent":"QUERY_PROGRESS","slots":{"query_topic":"all"}}],"allow_affirmative":true,"created_at":"2026-09-25T21:26:17.00202037Z"}} diff --git a/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/dev-health.json b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/dev-health.json new file mode 100644 index 00000000..231205f5 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/dev-health.json @@ -0,0 +1,16 @@ +{ + "status": "ok", + "env": "dev", + "agent_backend": "pi-agent", + "version": "v1.0", + "shared_kb_port": 5433, + "kb_ready": true, + "database_ready": true, + "schema_version": 73, + "schema_ready": true, + "task_store_ready": true, + "vault_identity_ok": false, + "vault_connected": false, + "vault_lag_ok": true, + "events_ready": true +} diff --git a/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/workspace-evidence.txt b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/workspace-evidence.txt new file mode 100644 index 00000000..3839bce2 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-26-dialogue-ctx-closeout/workspace-evidence.txt @@ -0,0 +1,54 @@ +== workspace context/dialogue listing == +total 32 +drwxr-xr-x 2 weichen weichen 4096 Sep 25 21:35 . +drwxr-xr-x 7 weichen weichen 4096 Sep 25 21:35 .. +-rw-r--r-- 1 weichen weichen 408 Sep 25 21:35 CONFIRMATIONS.md +-rw-r--r-- 1 weichen weichen 249 Sep 25 21:35 README.md +-rw-r--r-- 1 weichen weichen 651 Sep 25 21:35 digest.md +-rw-r--r-- 1 weichen weichen 1244 Sep 25 21:35 facts.json +-rw-r--r-- 1 weichen weichen 5646 Sep 25 21:35 turns.md + +== digest.md (head) == +# 项目对话纪要 + +权威度:`collab_dialogue`(低于黑板事实与已批准文档;冲突时不得静默采信对话版本) + +- 装配时间: 2026-09-25T21:35:28Z +- 纳入轮次: 18(私有排除 0 / 阶段不可见 0 / 噪声 19) +- 覆盖窗口: 2026-09-25 → 2026-09-25 + +## 按日要点 + +- **2026-09-26**: 张工: 我们这个项目主要面向三甲医院输液场景,临床反馈对流速精度要求比较高;张工: 上周和客户开过会,客户名称是协和医院,他们希望第二季度能拿到样品;张工: 注册分类是二类,走同品种临床评价路径,这个口径上次和法规老师确认过了 + +== CONFIRMATIONS.md == +# 上下文冲突裁决记录 + +- 生成时间: 2026-09-25T21:35:28Z + +## 1. `budget` + +- 决议: **needs_confirm** +- 理由: 同级时间相近且无明确证据,需人工确认 +- 胜者: budget=还是要20万吧,刚才和老板确认过范围包含型检(dialogue, rank=4) +- HITL: 是(路由 trigger_user) +- 并列矛盾: budget=大概10万,先按这个数做初步方案(dialogue, rank=4) + + +== facts.json keys == +['customer_name', 'classification', 'budget', 'budget'] + +== TASK.md nav (01_organize) == +- `../../context/project.md`:项目全局立项基线与产品定义 +- `../../context/user.md`:用户个性化工作偏好与决策约束 +- `../../context/dialogue/`:项目成员共享对话(纪要/近窗/事实/冲突裁决) +- `../../context/materials_text/README.md`:原始材料全文或基线说明 +- `../../context/knowledge/hits.md`:法规与标准命中快照 (若存在) + +== turns.md head == +# 项目成员对话近窗(带元数据原文) + +- 覆盖窗口: 2026-09-25 21:12 → 2026-09-25 21:35 +- 条数: 18 + +[2026-09-25 21:12] 张工(engineer/owner/duty:author) 用户: 我们这个项目主要面向三甲医院输液场景,临床反馈对流速精度要求比较高