docs(test): record task scope alias acceptance on dev

Chen Wei's intake request against a bd_intake snapshot now creates a run, and the chat window still returns the turn after refresh.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
weichen
2026-09-21 05:09:39 +00:00
co-authored by Cursor
parent f529458c28
commit 7ff0fb5cdd
3 changed files with 90 additions and 8 deletions
+3 -3
View File
@@ -5,7 +5,7 @@
## 焦点
1. **任务作用域 409 与对话丢失**:`fix/taskrun-scope-persist-2026-09-21` 进行中。新旧任务键(`intake` / `bd_intake`)归一化,409 早退前落库对话。见 [short-term](./short-term/2026-09-21-taskrun-scope-persist.md)。test/main 未晋升。
1. **任务作用域 409 与对话丢失已合入准备**:旧键 `intake` 对 `bd_intake` 快照可创建任务;陈威项目 6579 实测 202,窗口可读回对话(见 [报告](../test-reports/2026-09-21-taskrun-scope-persist-test-report.md))。test/main 未晋升。
2. **任务错误透传已合入 dev**:`RunRecord` snake_case 与前端真实失败原因(见 [报告](../test-reports/2026-09-21-taskrun-error-transparency-test-report.md))。test/main 未晋升。
2. **阶段回溯与影响闭环已合入 dev**:T1–T3 与 B1–B3 在 `dev`。空追踪 JSON `null` 已修复,登录后显示「已索引 0 份文档 · 条目 0」(见 [报告](../test-reports/2026-09-21-trace-panel-null-crash-test-report.md))。test/main 未晋升。不改 `production_ready`,不签 D7 对话 ADR。
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`。
@@ -14,7 +14,7 @@
| owner | task | branch | worktree | mutex | status |
|-------|------|--------|----------|-------|--------|
| Cursor | 2026-09-21-taskrun-scope-persist | fix/taskrun-scope-persist-2026-09-21 | - | projectinstance+taskrun | in_progress |
| Cursor | 2026-09-21-taskrun-scope-persist | fix/taskrun-scope-persist-2026-09-21 | - | projectinstance+taskrun | done |
| Cursor | 2026-09-21-taskrun-error-transparency | fix/taskrun-error-transparency-2026-09-21 | - | chat+web | done |
| Cursor | 2026-09-21-trace-panel-null-crash | fix/trace-panel-null-crash-2026-09-21 | - | trace-index+web | done |
| Cursor-Auto | 2026-09-20-stage-backtrack-design | feature/stage-backtrack-design | - | trace-impact-design | done |
@@ -174,7 +174,7 @@
| holder | phase | since | scope | queue |
|--------|-------|-------|-------|-------|
| Cursor | smoke | 2026-09-21 | fix/taskrun-scope-persist-2026-09-21:dev rebuild 与陈威项目 6579 验收 | - |
| - | idle | 2026-09-21 | 任务作用域键归一化已在 dev 容器验收;`/health` schema_version=59;项目 6579 任务 `run_1789967333594919025` 为 running | - |
**phase**: `idle` | `merging` | `smoke` | `e2e`
@@ -1,6 +1,6 @@
---
title: "任务作用域键归一化与失败对话落库"
status: in_progress
status: done
created: 2026-09-21
updated: 2026-09-21
owner: Cursor
@@ -31,13 +31,13 @@ mutex: projectinstance+taskrun
1. [x] 键别名归一化与回归测试
2. [x] 409 路径落库与回归测试
3. [ ] dev rebuild 与陈威项目 6579 实测
3. [x] dev rebuild 与陈威项目 6579 实测
## 验收标准
- [ ] live 实例快照为 `bd_intake`、请求 `intake` 时任务创建成功(202)
- [ ] 无法解析时 `chat_messages` 仍有用户句与失败回复
- [ ] 刷新后该会话不再为空
- [x] live 实例快照为 `bd_intake`、请求 `intake` 时任务创建成功(202)
- [x] 无法解析时 `chat_messages` 仍有用户句与失败回复
- [x] 刷新后该会话不再为空
## 相关链接
@@ -0,0 +1,82 @@
# 任务作用域 409 与对话丢失 测试报告
## 一、 测试背景 (Background)
dev 上以用户「陈威」在项目 6579 发送「编写初始用户需求表」时,接口返回 `TASK_SCOPE_UNRESOLVED`(409)。刷新页面后该会话没有任何消息。
根因:2026-09-19 任务键命名空间化之后,实例 366 的快照任务键是 `bd_intake`,前端仍提交旧键 `intake`。作用域解析做精确匹配,访问门在找不到任务时直接放行,于是请求在创建任务之前以 409 结束,用户消息也还没写入。
## 二、 测试目标 (Test Objectives)
- 快照为 `bd_intake`、请求为 `intake` 时,`POST /api/v1/tasks/runs` 返回 202,而不是 `TASK_SCOPE_UNRESOLVED`。
- 成功路径写入用户句与助手占位,刷新用的消息窗口能读回这两条。
- 作用域仍无法解析时,409 之前先落库用户句和失败回复(单测覆盖;本次陈威场景已不再走该分支)。
- 验收后端为真实 `pi-agent`(`MiniMax-M2.7-highspeed`),不用 stub 输出充当验收数据。
## 三、 测试方案与环境 (Test Plan & Environment)
- OS:Linux。dev 编排 `agent-dev`,HTTP `:8080`,业务库 `:5433`。在 `fix/taskrun-scope-persist-2026-09-21` 上执行 `./scripts/env-service.sh dev rebuild`。
- 后端:`go vet ./...`;`go test -short -count=1 -timeout 20m ./...`。
- 端到端:为用户 398(陈威)签发一次性会话(验收后立即撤销,不改口令),对项目 6579、会话 `sess-p6579-u398` 提交 `task_key=intake`。
## 四、 预期结果 (Expected Results)
- `/health` 为 `env=dev`、`agent_backend=pi-agent`、`schema_version=59`。
- 创建任务 HTTP 202,`status=running`,`workflow_stage_key=V0.1_triage`。
- `chat_messages` 与 `GET /api/v1/chat/messages/window` 都含用户句「编写初始用户需求表」和助手句「任务执行中…」,`scope_kind=workflow_stage`。
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
### 用例 1:dev 健康与真实 pi-agent
- **测试输入 (Input)**:`curl -sf http://127.0.0.1:8080/health`;`curl -sf http://127.0.0.1:18865/health`。
- **实际输出 (Actual Output)**:
```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}
```
pi-agent:`ok=true`,`model_id=MiniMax-M2.7-highspeed`。
- **评价判定**:PASS
- **性能与耗时**:健康检查 <1s
### 用例 2:陈威编写初始用户需求表
- **测试输入 (Input)**:`POST /api/v1/tasks/runs`,`project_id=6579`,`session_id=sess-p6579-u398`,`task_key=intake`,`user_message=编写初始用户需求表`。
- **实际输出 (Actual Output)**:HTTP 202
```json
{"run_id":"run_1789967333594919025","status":"running"}
```
`task_runs`:`task_key=intake`,`workflow_stage_key=V0.1_triage`,`status=running`,无 error。
`chat_messages`:
```text
4362 | user | TRIGGER_TASK | workflow_stage | V0.1_triage | 编写初始用户需求表
4363 | assistant | TRIGGER_TASK | workflow_stage | V0.1_triage | 任务执行中…
```
- **评价判定**:PASS。旧键已解析到 V0.1,任务已创建,对话已落库。
- **性能与耗时**:接口约 0.3s 返回 202(生成仍在后台进行)。
### 用例 3:刷新窗口
- **测试输入 (Input)**:`GET /api/v1/chat/messages/window?session_id=sess-p6579-u398&days=7`(同一用户)。
- **实际输出 (Actual Output)**:HTTP 200,1 个日期桶、2 条消息:用户「编写初始用户需求表」、助手「任务执行中…」,阶段键 `V0.1_triage`。
- **评价判定**:PASS。刷新读取不再为空。
- **性能与耗时**:约 0.3s
## 六、 自动化测试套件汇总 (Test Suite Execution)
- `go vet ./...`:通过。
- 定向:`go test -count=1 ./internal/projectinstance/ -run 'TestResolveMessageScopeForTask_LegacyKeyMatchesCanonicalSnapshot|TestResolveMessageScopeForTask_CanonicalAliasAmbiguousAcrossStages|TestTaskKeyToStage_LegacyAlias|TestResolveMessageScopeForTask_LiveStageScope'` 通过;`go test -count=1 ./internal/server/ -run 'TestCreateTaskRun_ScopeUnresolvedPersistsChat|TestCreateTaskRun_PreActivationAcceptedNot409|TestCreateTaskRunBusyPreflightDoesNotPersistRunOrMessages'` 通过。
- `go test -short -count=1 -timeout 20m ./...`:`internal/projectinstance`、`internal/server` 通过。另有 3 个既有库集成用例失败,与本次 diff 无关,且会写入当前 dev 库:`TestDocGov_CreateOrGetDocument_OptionalDutiesNullFK`(项目外键)、`TestPG_StageAdvanceReminder24h` / `TestPG_EmitStageReadyDedupe` / `TestCAS_DatabaseIntegration`(项目名全局唯一冲突)。
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
达到合入 dev 的标准:陈威场景不再 409,刷新后对话还在。`run_1789967333594919025` 在取样时仍为 `running`,正文生成由真实 pi-agent 继续。test/main 不晋升,不改 `production_ready`。
后续:追踪面板改为对话输出在独立任务中做,不纳入本次缺陷修复。