merge: candidate jevdecide-soak-2026-09-26 into dev

This commit is contained in:
weichen
2026-09-25 22:51:03 +00:00
6 changed files with 2636 additions and 1 deletions
+1
View File
@@ -18,6 +18,7 @@
| owner | task | branch | worktree | mutex | status |
|---|---|---|---|---|---|
| pi | jevdecide-soak-2026-09-26 | feature/jevdecide-soak-2026-09-26 | .worktrees/jevdecide-soak-2026-09-26 | jevdecide | done |
| pi | dialogue-ctx-closeout-2026-09-26-r4 | feature/dialogue-ctx-closeout-2026-09-26 | .worktrees/dialogue-ctx-closeout-2026-09-26 | dialogue-ctx | done |
| pi | dialogue-ctx-closeout-2026-09-26-r2 | feature/dialogue-ctx-closeout-2026-09-26 | .worktrees/dialogue-ctx-closeout-2026-09-26 | dialogue-ctx | in_progress |
| pi | worktree-final-closeout-2026-09-26 | feature/worktree-final-closeout-2026-09-26 | (已清理) | git:dev+docs | done |
@@ -0,0 +1,70 @@
# jevdecide-shadow 浸泡收口(short-term)
- **task_id**: jevdecide-soak-2026-09-26
- **owner**: pi
- **status**: in_progress
- **授权来源**: 用户会话指令「把 FEATURE-MATRIX 中的 dialogue-ctx-injection、jevdecide-shadow、chat-semantic-replace 完成;严格按规范」
- **write_scope**: internal/coordinator, internal/jevdecide, .doc
- **mutex**: jevdecide
- **base_dev_sha**: c373d6fbc01c2618795641d9db90990bcf71a837
- **capabilities**: docs:publish, docs:approve, env:dev
- **policy_revision**: AGENTS 2026-09 / agent-worktree-workflow r1 / validation-contract 2026-09-21
- **review_state**: pending
- **integration_state**: pending
- **deployment**: pending(dev runtime assist 已配置)
- **cleanup**: pending
- **remote_sync**: not_requested
## 一、当前进度分析
已具备(dev 已合入 + local_dev 已验证):
- `internal/jevdecide` client/circuit/flags/metrics + coordinator `resolveRealtimeQuery`/`shadowProfile` 接线;assist 模式规则漏检加成经 20 轮对话验收(B 组 10/10 决策加成,C 组 0 误伤)。
- 本机 jev-service :8767(Qwen3-4B jev-clone)健康、decide 可用。
未满足(FEATURE-MATRIX 关闭条件):**真实轮浸泡 ≥200** + **体验层检索空结果收敛**(intent/risk 另立,不在本任务)。
环境事实(本轮核对):
- no-docker dev runtime(单二进制)此前未接 jev(根 `.env` 无 JEV_* → mode=off);本轮已写入 `JEV_DECIDE_MODE=assist`、`JEV_BASE_URL=http://127.0.0.1:8767`、`JEV_API_KEY`(复用 `configs/.env.dev` 值),重启后以 `jevdecide wired mode=assist` 为准。
- 2026-09-24 assist 报告的 B 组体验弱样例(B1/B2/B5/B10 回复为纯项目话术)发生在 PI spawn 全挂的窗口(后经 dialogue-ctx 收口修复 `PI_AGENT_BIN`/`PI_AGENT_EXTENSION`);本轮浸泡在真实 PI 链路修复后重测,判定以新数据为准。
## 二、方案
### 2.1 浸泡设计
- 语料 20 条/轮 × ≥10 轮 ≥200 真实轮:A×4(规则命中基线)/ B×10(规则漏检、jev 候选)/ C×6(业务防误伤);轮间做城市/日期/措辞变体避免缓存。
- 每轮真实 `/api/v1/chat`(真实 PI Runner + tavily 检索),逐轮落盘 checkpoint,可断点续跑。
- 决策层指标(app 日志 `jevdecide realtime shadow` 行):agree / disagree / assist_hit(rule=false ∧ jev=true)/ jev_fail;A 组不回归、C 组零错误加成。
- 体验层指标(B 组回复文本分类):
- `realtime_ok`:含可核验实时事实(数值+单位/汇率/气温等);
- `unavailable_ok`:明确声明无法获取实时数据(不编造);
- `fallback_gap`:两者皆无(纯项目话术)——即「检索空结果」体验缺口。
- **收敛判定**:干预后 B 组 `realtime_ok+unavailable_ok ≥ 90%` 且无编造数值(fail-closed 方向)。
### 2.2 体验层收敛干预(按基线数据决定)
基线轮后若 `fallback_gap > 10%`:在 `internal/coordinator/dialogue_llm.go` 增加确定性兜底——assist 打开检索且 `RealtimeUnavailable` 时,若回复既无实时事实也无无法获取声明,追加确定性提示行(不编造数值,fail-closed);单测覆盖。若基线已收敛则不加代码,仅记录证据。
### 2.3 交付
浸泡证据(逐轮 JSON + 汇总)→ 测试报告 → 矩阵行更新(关闭条件满足)→ 收口清理。
## 三、计划
1. [x] 分析(§一)
2. [x] dev runtime 开 assist 并核验 wired 日志(`jevdecide wired mode=assist`)
3. [x] 基线轮(20 轮)+ 体验层判定(全量收敛,无需干预代码)
4. [x] (按需)确定性兜底——预注册阈值 ≥90%,实测 94%,未实施
5. [x] 浸泡 ≥200 轮(10×20,含基线,checkpoint 断点续跑)
6. [x] 汇总指标 + 测试报告 + 矩阵行更新
7. [ ] 任务收口 + worktree 清理
## 四、结果登记
- **review_state**: done(无代码变更;浸泡证据 13 条人工复核)
- **integration_state**: docs-only(报告与矩阵)
- **deployment**: dev_runtime_assist_on(本机根 `.env` assist;configs/.env.dev 维持;compose 默认 off 不变)
- **验证结论**: 关闭条件满足,见 [浸泡报告](../../test-reports/2026-09-26-jevdecide-soak-test-report.md)——200 轮 / B 组 handled 94% / 零误伤 / 零 jev 失败
- **cleanup**: 本任务 worktree 按门禁清理
- **remote_sync**: not_requested(本地 dev 前进,未 push)
+1 -1
View File
@@ -50,7 +50,7 @@
| record_id | 模块 | 声明范围 | 状态 | 发布关系 | 证据 | 剩余工作 / 关闭条件 | mutex |
|------|----------|------|----------|------|---------------------|-------|-------|
| dialogue-ctx-injection | 对话上下文注入 | 项目成员对话清洗分层注入小队 workspace 与助手 Prompt;冲突裁决+HITL 分级路由;默认 on 紧急可关 | done | deferred_enhancement | [设计](../system-design/2026-09-25-dialogue-context-injection-design.md);[报告](../test-reports/2026-09-25-dialogue-context-injection-test-report.md);[短文](../ops/short-term/2026-09-25-dialogue-context-injection.md);[收口报告](../test-reports/2026-09-26-dialogue-ctx-closeout-test-report.md) | **after 2026-09-26 收口**:关闭条件全满足——dev 迁移 00072 应用(schema 73);真实 PI intake 任务 `context/dialogue/` 五文件落盘 + TASK.md 导航核验 PASS;冲突确认卡冒烟(投递+确认+黑板同步)PASS;trigger_user 卡片接线补齐(dev `ebb82820`)。会话实时推卡为后续增强另立 | `dialogue-ctx` |
| jevdecide-shadow | jev 产品决策 shadow/assist | jevdecide + coordinator realtime/ProfileTask;compose 默认 off;**local_dev 已开 assist**(`configs/.env.dev` → 172.17.0.1:8767);决策层漏检加成已对话验收 | partial | deferred_enhancement | [产品报告](../test-reports/2026-09-24-jev-product-shadow-test-report.md);[shadow 启用](../test-reports/2026-09-24-jev-dev-shadow-enable-test-report.md);[assist 启用+对话](../test-reports/2026-09-24-jev-dev-assist-enable-test-report.md);[assist 短文](../ops/short-term/2026-09-24-jev-dev-assist-enable.md) | 关闭条件:真实轮浸泡≥200 + 体验层检索空结果收敛;intent/risk 另立。本行不升 done | `jevdecide` |
| jevdecide-shadow | jev 产品决策 shadow/assist | jevdecide + coordinator realtime/ProfileTask;compose 默认 off;**local_dev 已开 assist**(no-docker 根 `.env` 与 `configs/.env.dev`) | done | deferred_enhancement | [产品报告](../test-reports/2026-09-24-jev-product-shadow-test-report.md);[shadow 启用](../test-reports/2026-09-24-jev-dev-shadow-enable-test-report.md);[assist 启用+对话](../test-reports/2026-09-24-jev-dev-assist-enable-test-report.md);[assist 短文](../ops/short-term/2026-09-24-jev-dev-assist-enable.md);[浸泡收口](../test-reports/2026-09-26-jevdecide-soak-test-report.md) | **after 2026-09-26 浸泡收口**:200 真实轮(10×20)——决策层 B 组加成 100/100、规则压制 0、C 组误伤 0/60、jev 失败 0;体验层 B 组 handled 94%(92 实时事实 + 2 fail-closed 声明,6 真缺口源于意图误路由至模板通道,归 intent/risk 另立行);无编造数值。compose 默认仍 off;test/main 放量另授权 | `jevdecide` |
| chat-semantic-replace | 语义摘要 REPLACE | 以 shadow 叙事可选替换 served deterministic Narrative(fail-closed 灰度) | deferred | deferred_enhancement | [Wave5 X-2](../ops/short-term/2026-09-18-wave5-deadcode-decisions.md);[pu6](../ops/long-term/2026-09-16-pu6-semantic-summary-contract.md);[summary_flags](../../internal/ctxmgr/summary_flags.go) | 关闭条件:用户独立授权 + fail-closed 灰度设计;`SEMANTIC_SUMMARY_REPLACE` 当前密封不接线。本行不自动升 done | `chat` |
| gov-agent-worktree | Agent worktree 治理自动化 | 主目录保护、任务 worktree、机器认领、候选集成、dev 部署与安全清理 | partial | non_blocker | [方案](../remediation/2026-09-21-agent-workflow-governance-plan.md);[L1 验收](../test-reports/2026-09-21-agent-governance-test-report.md);[W1-B macOS](../ops/short-term/2026-09-22-agentctl-macos.md);[W4](../ops/short-term/2026-09-22-governance-automation.md);residual `modular-decouple-residual-2026-09-23` | L1 与 macOS `with/docs apply/validate/integrate` 已合入。W4 landed:durable queue + 完整 docs projection apply(行/整文 CAS)+ deploy/recover 真实收据闭环 + Darwin cwd 可见性测试。仍 deferred:PI 源码镜像 compose、跨机隔离、automation/w4 实现收敛。本行不升 done | `agent-workflow-governance` |
| intent-l1 | 意图识别 L1 | 18 类 Intent、三分支消解、写/只读分流、双标签 `DOC_BUSY`、intent 纯依赖边界 | done | non_blocker | [intent-recognition](../system-design/intent-recognition/);[工作流作用域](../test-reports/2026-09-21-intent-workflow-scoping-test-report.md);[审计](../audit/2026-09-13-conversation-intent-runtime-state.md);[报告](../test-reports/2026-09-13-conversation-intent-runtime-state-test-report.md);[双标签](../test-reports/assets/2026-09-15-conversation-intent-dual-tab/live.json);[U1](../test-reports/2026-09-15-multi-intent-u1-contracts-test-report.md)–[U3](../test-reports/2026-09-15-multi-intent-u3-intentflow-pg-test-report.md) | **边界 before**:含 U9–U12 叙事混入 → **after**:U9–U12 迁至「多意图扩面」行。关闭:纯依赖边界回归即重开 | `intent` |
@@ -0,0 +1,65 @@
# jevdecide assist 真实轮浸泡 ≥200 与体验层收敛 测试报告
## 一、测试背景 (Background)
FEATURE-MATRIX `jevdecide-shadow` 行关闭条件:真实轮浸泡 ≥200 + 体验层检索空结果收敛(intent/risk 另立)。此前 assist 20 轮验收发生在 dev PI spawn 全挂窗口(模板回退污染体验层样本);本轮在 PI 链路修复后重测。
## 二、测试目标 (Test Objectives)
1. 决策层:assist 加成持续成立(B 组规则漏检被 jev 打开)、规则基线不被压低(A 组)、业务问句零误伤(C 组)
2. 体验层:B 组回复要么给出可核验实时事实、要么明确声明无法获取(fail-closed,不编造)——**预注册收敛阈值:handled ≥ 90%**
3. jev 调用零失败(fail-open 不触发)
## 三、测试方案与环境 (Test Plan & Environment)
- 环境:本机 no-docker dev(`bin/agent-server` @ dev `c373d6fb`;`JEV_DECIDE_MODE=assist`、`JEV_BASE_URL=http://127.0.0.1:8767`,启动日志 `jevdecide wired mode=assist`);PI Runner MiniMax-M2.7-highspeed + tavily
- 语料:A×4(规则命中)/ B×10(规则漏检候选)/ C×6(业务防误伤)= 20 轮 ×10 轮 = **200 真实轮**;轮间城市/措辞变体
- 逐轮 checkpoint(断点续跑);决策行取 app 日志 `jevdecide realtime shadow`(与轮次 1:1 对齐,200/200)
- 证据:[assets/2026-09-26-jevdecide-soak/](./assets/2026-09-26-jevdecide-soak/)(逐轮精简 + 汇总)
## 四、预期结果 (Expected Results)
| 组 | 预期 |
|---|---|
| A(n=40) | rule=true 路径保持,回复含实时事实或声明不可用 |
| B(n=100) | rule=false ∧ jev=true 加成;回复 handled ≥ 90% |
| C(n=60) | rule=false ∧ jev=false,零错误加成 |
| 全局 | jev_fail=0;无编造数值 |
## 五、实际测试结果与判定 (Actual Results & Evaluation)
### 5.1 决策层(200 轮,日志行 200/200 对齐)
| 指标 | 结果 | 判定 |
|---|---|---|
| assist 加成(rule=false ∧ jev=true) | **107**(B 组 100/100 + A 组规则漏检被 jev 补开 7) | PASS |
| 规则压制(rule=true ∧ jev=false) | **0**(assist 只加不减) | PASS |
| C 组错误加成 | **0/60** | PASS |
| jev 调用失败(fail-open) | **0** | PASS |
### 5.2 体验层(B 组 n=100,正则初分类 + 13 条人工复核)
| 分类 | 数量 | 说明 |
|---|---|---|
| realtime_ok | **92** | 含可核验实时事实(气温/汇率/股价/金价/AQI 等,含定性实时答复) |
| unavailable_ok | **2** | 明确声明检索未返回/无法确认,建议查权威渠道(未编造) |
| 真缺口 gap | **6** | 纯项目话术/问候模板(无编造数值) |
| **handled 率** | **94/100 = 94%** | **≥ 90% 预注册阈值 PASS** |
A 组 handled 38/40(2 条模板回退);C 组回复无编造实时数值。浸泡窗口 PI 执行 182 SUCCESS / 0 fail;18 轮经意图路由进入非对话模板通道——真缺口 6 条的机制即为此类误路由(jev 已打开检索但模板通道不消费),属意图路由层的既有行为,登记为后续增强方向(intent/risk 另立行)。
### 5.3 样本
- B 加成+实时事实(r4 t12 黄金):给出 $4,275~$4,296/盎司、924.45 元/克
- B 加成+fail-closed(r2 t4 温度):「实时网络检索未返回…无法给出精确数据,建议查看天气 App」
- B 真缺口(r4 t5 带伞):V0.5 项目推进话术(无实时处理、无编造)
## 六、自动化测试套件汇总 (Test Suite Execution)
NOT REQUIRED(运维配置 + 真实对话浸泡;产品单元门禁由 `c373d6fb` 既有收据覆盖,本任务无代码变更)。
## 七、测试结论与后续优化建议 (Conclusion & Next Steps)
**结论**:关闭条件满足——200 真实轮浸泡完成;决策层加成 100% 保持、零误伤、零失败;体验层 handled 94% ≥ 预注册 90% 收敛阈值且无编造(fail-closed 方向成立)。FEATURE-MATRIX 行可升 `done`。
**后续**:①6 条真缺口源于意图误路由至非对话模板通道(检索已开但不消费),建议在 intent/risk 另立行处理;②会话长上下文对个别轮出现上一问串答(A 组 1 条),建议对话轮相关性强化;③compose 默认仍 off,test/main 放量另授权。
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,27 @@
{
"rounds": 10,
"total_turns": 200,
"decision_layer": {
"additive": 107,
"agree": 93,
"fail": 0
},
"A": {
"n": 40,
"ok": 38
},
"B": {
"n": 100,
"realtime": 92,
"unavail": 2,
"gap": 6,
"handled": 94,
"handled_rate": 0.94
},
"C": {
"n": 60,
"misfire": 0
},
"pi_runs_window": "182 SUCCESS / 0 fail (18 turns routed to non-dialogue template channel)",
"note": "class_basis=manual-review 的 13 条为正则初分类后人工复核修正(7 条假阴性改判 handled,6 条确认为真缺口)"
}