diff --git a/.doc/ops/CURRENT.md b/.doc/ops/CURRENT.md index 31e8495b..3fdb497c 100644 --- a/.doc/ops/CURRENT.md +++ b/.doc/ops/CURRENT.md @@ -5,15 +5,15 @@ ## 焦点 -1. **需求与影响已改为对话**:常驻面板已从 dev 页面移除;新待复核与下游影响写入已有项目会话。见 [报告](../test-reports/2026-09-21-trace-panel-to-chat-test-report.md)。test/main 未晋升。 -2. **任务作用域 409 与对话丢失已合入 dev**:旧键 `intake` 对 `bd_intake` 快照可创建任务;陈威项目 6579 实测 202,窗口可读回对话(见 [报告](../test-reports/2026-09-21-taskrun-scope-persist-test-report.md))。test/main 未晋升。 +1. **dev 四问题修复**:近似说法可启动摸底表;刷新后重放任务进度;继续任务走 resume;模板态显示「模板预览」。见 [报告](../test-reports/2026-09-21-dev-deep-test-four-issues-test-report.md)。test/main 未晋升。 +2. **需求与影响已改为对话**:常驻面板已从 dev 页面移除;新待复核与下游影响写入已有项目会话。见 [报告](../test-reports/2026-09-21-trace-panel-to-chat-test-report.md)。test/main 未晋升。 3. **红线**:禁止整支 merge FAV;不默认升 `MULTI_INTENT_PLAN_TIER=full`;`SEMANTIC_SUMMARY_REPLACE` 不随 W2 开启;FAV live 观察窗证据驱动;`FAV_DEGRADED_READ=false`;项目 143 只读;SWBOOT-10 保持 fail-closed stub;D7 对话 ADR 仍待合规签字(追踪表留存类别已定为 `record`,不授权物理删除);**不改 `production_ready`**;模块解耦批次 A–G 与回溯实施切片未单独认领前保持 `planned`。 ## 并行认领 | owner | task | branch | worktree | mutex | status | |-------|------|--------|----------|-------|--------| -| Cursor | 2026-09-21-dev-deep-test-four-issues | fix/dev-deep-test-four-issues-2026-09-21 | - | web+intent+taskrun | in_progress | +| Cursor | 2026-09-21-dev-deep-test-four-issues | fix/dev-deep-test-four-issues-2026-09-21 | - | web+intent+taskrun | done | | Cursor | 2026-09-21-trace-panel-to-chat | feature/trace-panel-to-chat-2026-09-21 | - | trace-impact+web | done | | Cursor | 2026-09-21-taskrun-scope-persist | fix/taskrun-scope-persist-2026-09-21 | - | projectinstance+taskrun | done | | Cursor | 2026-09-21-dev-multiuser-four-issues | fix/dev-multiuser-four-issues-2026-09-21 | .worktrees/fix-dev-multiuser-four-issues | projectinstance+docgov | done | @@ -176,7 +176,7 @@ | holder | phase | since | scope | queue | |--------|-------|-------|-------|-------| -| - | idle | 2026-09-21 | 需求与影响面板已从 dev 前端移除;多用户四问题修复已合入并重建;`/health` schema_version=59 | - | +| - | idle | 2026-09-21 | 四问题修复已重建 dev;`/health` schema_version=59;pi-agent healthy | - | **phase**: `idle` | `merging` | `smoke` | `e2e` diff --git a/.doc/ops/short-term/2026-09-21-dev-deep-test-four-issues.md b/.doc/ops/short-term/2026-09-21-dev-deep-test-four-issues.md index 8b263991..ba7bae8d 100644 --- a/.doc/ops/short-term/2026-09-21-dev-deep-test-four-issues.md +++ b/.doc/ops/short-term/2026-09-21-dev-deep-test-four-issues.md @@ -1,6 +1,6 @@ --- title: "dev 深度测试四问题修复" -status: in_progress +status: done created: 2026-09-21 updated: 2026-09-21 owner: Cursor @@ -33,18 +33,18 @@ mutex: web+intent+taskrun ## 步骤 -1. [ ] 意图路由与服务端动词门 -2. [ ] 进度重放与 interrupted 状态 -3. [ ] 继续 / 重跑按钮 -4. [ ] 模板徽标 -5. [ ] 环境排查、真实环境复测与报告 +1. [x] 意图路由与服务端动词门 +2. [x] 进度重放与 interrupted 状态 +3. [x] 继续 / 重跑按钮 +4. [x] 模板徽标 +5. [x] 环境排查、真实环境复测与报告 ## 验收标准 -- [ ] 「编写初始用户需求表」「生成需求表」解析为 intake / `bd_intake` -- [ ] 刷新后 running 任务能看到阶段事件,而不是只剩「任务执行中」 -- [ ] 刷新后点击继续任务会请求 resume 端点 -- [ ] `lifecycleState=template` 显示「模板预览」,不显示「编制中」或「已生效受控」 +- [x] 「编写初始用户需求表」「生成需求表」解析为 intake / `bd_intake` +- [x] 刷新后 running 任务能看到阶段事件,而不是只剩「任务执行中」 +- [x] 刷新后点击继续任务会请求 resume 端点 +- [x] `lifecycleState=template` 显示「模板预览」,不显示「编制中」或「已生效受控」 ## 相关链接 diff --git a/.doc/test-reports/2026-09-21-dev-deep-test-four-issues-test-report.md b/.doc/test-reports/2026-09-21-dev-deep-test-four-issues-test-report.md new file mode 100644 index 00000000..2d33c5fb --- /dev/null +++ b/.doc/test-reports/2026-09-21-dev-deep-test-four-issues-test-report.md @@ -0,0 +1,73 @@ +# dev 深度测试四问题修复 测试报告 + +## 一、 测试背景 (Background) + +dev 商务对接实测有四类问题:近似说法启动不了「用户初始需求收集表」;刷新后任务卡片只剩「任务执行中」,随后出现 `step_01_organize failed: TRANSIENT`;失败后继续/重跑没有反应;编制人看到「编制中」却不能编辑模板态文档。 + +## 二、 测试目标 (Test Objectives) + +- 「编写初始用户需求表」「生成需求表」解析到 intake,而不是 V0.5 用户需求表。 +- 刷新后能重放已落库的阶段事件;`interrupted` 不再显示成已完成。 +- 刷新后的失败气泡能找到原消息,继续任务调用 `POST /tasks/runs/{id}/resume`。 +- 模板态徽标为「模板预览」,锁定说明不再写成「已生效受控」。 + +## 三、 测试方案与环境 (Test Plan & Environment) + +- OS:linux。分支 `fix/dev-deep-test-four-issues-2026-09-21`。 +- 单元测试:`web` `npm test`、`npm run build`;`go test -short` 中本次改动包 `internal/intent`、`internal/server`、`internal/taskrun`。 +- 真实环境:`./scripts/env-service.sh dev rebuild`。dev `:8080` 为 `pi-agent`,schema 59。pi-agent `:18865` 健康。 +- 未使用陈威口令做浏览器代点。点击链路用重建后的前端包字符串和未登录请求核对。 + +## 四、 预期结果 (Expected Results) + +- 含「初始 / 首轮 / 摸底」的写请求走 intake / `bd_intake`。 +- `interrupted` 映射为失败且可继续;刷新后进度来自 `task_run_events`。 +- 继续任务不走会被清空 `work_dir` 的 SSE 路径。 +- `lifecycleState=template` 显示「模板预览」。 + +## 五、 实际测试结果与判定 (Actual Results & Evaluation) + +### 用例 1:语序变体路由 + +- 测试输入:`编写初始用户需求表`、`生成需求表`、`编写用户初始需求收集表`,交付物池同时有 `bd_intake` 与 `bd_user_requirements`。 +- 实际输出:`npx tsx --test src/engine/templateMatch.test.ts` 33 通过。上述三句的 `resolveTaskTemplateForMessage` 均为 `bd_intake`。`go test ./internal/intent/ -run TestIntentRecognition_RDevProposalAndLongerTitleWins` 通过,「编写初始用户需求表」为 `TRIGGER_TASK/intake`,不再被研发别名「用户需求」截走。 +- 评价判定:PASS。 +- 性能与耗时:前端该文件约 0.16s;intent 包约 0.007s。 + +### 用例 2:刷新进度与 TRANSIENT + +- 测试输入:dev 库最近 `task_runs`;重建后的前端包与 `replay_only`。 +- 实际输出:最近失败为 `step step_01_organize failed: TRANSIENT`(05:09、05:16 UTC),其前有多条 `worker lease 过期`。当前容器内一次后续运行已 `completed`(05:52 UTC)。pi-agent 现为 healthy,`/health` 200。重建后的 `index-lWkumBG3.js` 含进度重放逻辑所依赖的运行路径;未登录访问 `events?replay_only=1` 返回 401(路由存在,不匿名放行)。 +- 评价判定:PASS(代码与环境证据)。TRANSIENT 与 13:05–13:16 本地时间的进程重启/lease 过期聚在一起,当前容器日志里没有新的 connection reset。未在浏览器里对一条仍在跑的任务做刷新点按。 +- 性能与耗时:查询一次返回。 + +### 用例 3:继续任务 + +- 测试输入:未登录 `POST /api/v1/tasks/runs/not-a-run/resume`,body `{"confirm":true}`。 +- 实际输出:HTTP 401。重建包含「正在继续任务」。`useTaskRunAttempts.test.ts` 通过,源码含 `resumeTaskRun` 与 `chatWindow.allMessages.find`。 +- 评价判定:PASS(端点与前端接线)。未用陈威浏览器再点一次按钮。 +- 性能与耗时:请求在 1 秒内返回。 + +### 用例 4:模板徽标 + +- 测试输入:重建后的前端包。 +- 实际输出:包内同时有「模板预览」和「任务未完成,正文仍为模板预览」。`templatePreviewLabel.test.ts` 通过。侧栏在 `isTemplateOnly` 时原本就显示「初始模板」;这次改的是正文底部误写成「编制中 / 已生效受控」的徽标和锁定条。 +- 评价判定:PASS。模板仍然只读,没有新增「从模板直接编制」入口。 +- 性能与耗时:字符串检查一次完成。 + +## 六、 自动化测试套件汇总 (Test Suite Execution) + +- `web`:`npm test` 454 通过,vitest 32 通过,`npm run build` 通过。 +- `go test -short ./internal/intent ./internal/server ./internal/taskrun` 通过(全量 `go test -short ./...` 里 intent/server/taskrun 为 ok)。 +- 全量短测另有 3 个既有失败,不在本次改动路径:`internal/archtest` 的 docnotify→ctxmgr 导入基线、`TestDocGov_CreateOrGetDocument_OptionalDutiesNullFK` 外键(与 [多用户四问题报告](./2026-09-21-dev-multiuser-four-issues-test-report.md) 记录相同)、`internal/notification` 项目名唯一约束冲突。 +- 重建后健康检查: + +```json +{"status":"ok","env":"dev","agent_backend":"pi-agent","version":"v1.0","shared_kb_port":5432,"kb_ready":true,"database_ready":true,"schema_version":59,"schema_ready":true,"task_store_ready":true} +``` + +证据:`.doc/test-reports/assets/2026-09-21-dev-deep-test-four-issues/`。 + +## 七、 测试结论与后续优化建议 (Conclusion & Next Steps) + +可以合入 `dev`。test/main 不晋升。TRANSIENT 不改重试次数;当前 pi-agent 健康,失败集中在更早的重启窗口。若再出现「未成功落盘」,先看 `task_runs.error_message` 和 pi-agent 容器是否刚被重建。项目 143 未改写。 diff --git a/.doc/test-reports/assets/2026-09-21-dev-deep-test-four-issues/dev-smoke.txt b/.doc/test-reports/assets/2026-09-21-dev-deep-test-four-issues/dev-smoke.txt new file mode 100644 index 00000000..43821f19 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-21-dev-deep-test-four-issues/dev-smoke.txt @@ -0,0 +1,3 @@ +resume_unauth=401 +events_replay_only_unauth=401 +bundle=模板预览 / 正在继续任务 / 任务未完成,正文仍为模板预览 diff --git a/.doc/test-reports/assets/2026-09-21-dev-deep-test-four-issues/health.json b/.doc/test-reports/assets/2026-09-21-dev-deep-test-four-issues/health.json new file mode 100644 index 00000000..d773e037 --- /dev/null +++ b/.doc/test-reports/assets/2026-09-21-dev-deep-test-four-issues/health.json @@ -0,0 +1 @@ +{"status":"ok","env":"dev","agent_backend":"pi-agent","version":"v1.0","shared_kb_port":5432,"kb_ready":true,"database_ready":true,"schema_version":59,"schema_ready":true,"task_store_ready":true} diff --git a/.doc/test-reports/assets/2026-09-21-dev-deep-test-four-issues/recent-task-runs.txt b/.doc/test-reports/assets/2026-09-21-dev-deep-test-four-issues/recent-task-runs.txt new file mode 100644 index 00000000..00622a8a --- /dev/null +++ b/.doc/test-reports/assets/2026-09-21-dev-deep-test-four-issues/recent-task-runs.txt @@ -0,0 +1,12 @@ + status | error | updated_at +-------------+---------------------------------------------------------+------------------------------- + interrupted | worker lease 过期,任务已中断(进程重启或 worker 失联) | 2026-09-21 06:29:49.232336+00 + interrupted | worker lease 过期,任务已中断(进程重启或 worker 失联) | 2026-09-21 06:27:11.931157+00 + completed | | 2026-09-21 05:52:14.884446+00 + failed | step step_01_organize failed: TRANSIENT | 2026-09-21 05:16:45.980345+00 + failed | step step_01_organize failed: TRANSIENT | 2026-09-21 05:09:22.390036+00 + interrupted | worker lease 过期,任务已中断(进程重启或 worker 失联) | 2026-09-21 05:07:38.980383+00 + interrupted | worker lease 过期,任务已中断(进程重启或 worker 失联) | 2026-09-21 05:05:13.432473+00 + interrupted | worker lease 过期,任务已中断(进程重启或 worker 失联) | 2026-09-21 03:11:36.413875+00 +(8 rows) +