merge: fix/trace-panel-null-crash-2026-09-21 slot release
This commit is contained in:
+5
-4
@@ -5,15 +5,16 @@
|
||||
|
||||
## 焦点
|
||||
|
||||
1. **ProjectTracePanel 空追踪崩溃**:`fix/trace-panel-null-crash-2026-09-21` 修复 `index`/`recheck_marks` 的 JSON `null`(见 [short-term](./short-term/2026-09-21-trace-panel-null-crash.md))。
|
||||
2. **阶段回溯与影响闭环已合入 dev**:T1–T3 与 B1–B3 在 `dev`。dev 已 rebuild,`/health` 的 `schema_version` 为 59,五表已在开发库。test/main 未晋升。不改 `production_ready`,不签 D7 对话 ADR。
|
||||
1. **任务错误透传**:`fix/taskrun-error-transparency-2026-09-21` 修复 `RunRecord` PascalCase 与前端 `NETWORK_ERROR` 误报(见 [short-term](./short-term/2026-09-21-taskrun-error-transparency.md))。追踪面板冒烟槽位已释放,可以合入。
|
||||
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`。
|
||||
|
||||
## 并行认领
|
||||
|
||||
| owner | task | branch | worktree | mutex | status |
|
||||
|-------|------|--------|----------|-------|--------|
|
||||
| Cursor | 2026-09-21-trace-panel-null-crash | fix/trace-panel-null-crash-2026-09-21 | - | trace-index+web | in_progress |
|
||||
| Cursor | 2026-09-21-taskrun-error-transparency | fix/taskrun-error-transparency-2026-09-21 | - | chat+web | in_progress |
|
||||
| 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 |
|
||||
| Cursor-Auto | 2026-09-20-impact-loop-t1 至 T3/B1–B3 | feature/stage-backtrack-impl | - | trace-index | done |
|
||||
| Cursor | 2026-09-20-rdev-seed-hotfix | fix/workflow-seed-bootstrap-2026-09-20 | - | workflow-def | done |
|
||||
@@ -171,7 +172,7 @@
|
||||
|
||||
| holder | phase | since | scope | queue |
|
||||
|--------|-------|-------|-------|-------|
|
||||
| Cursor | smoke | 2026-09-21 | ProjectTracePanel 空追踪 JSON null:`go vet`、`go test -short`、dev rebuild、`/health`、浏览器项目页 | - |
|
||||
| - | idle | 2026-09-21 | ProjectTracePanel 空追踪修复已合入 dev;`/health` schema_version=59;浏览器显示「已索引 0 份文档 · 条目 0」 | - |
|
||||
|
||||
**phase**: `idle` | `merging` | `smoke` | `e2e`
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: "修复 ProjectTracePanel 空追踪 JSON null 崩溃"
|
||||
status: in_progress
|
||||
status: done
|
||||
created: 2026-09-21
|
||||
updated: 2026-09-21
|
||||
owner: Cursor
|
||||
@@ -29,22 +29,22 @@ dev 登录后打开已有项目时,「需求与影响」面板不再因 `view.
|
||||
## 步骤
|
||||
|
||||
1. [x] 从 `dev` 切 `fix/trace-panel-null-crash-2026-09-21` 并登记认领
|
||||
2. [ ] service 层 nil 切片兜底
|
||||
3. [ ] 前端 `fetchProjectTrace` 规范化
|
||||
4. [ ] Go 与前端回归测试
|
||||
5. [ ] 占集成槽位 rebuild dev,浏览器确认面板显示「已索引 0 份文档」
|
||||
2. [x] service 层 nil 切片兜底
|
||||
3. [x] 前端 `fetchProjectTrace` 规范化
|
||||
4. [x] Go 与前端回归测试
|
||||
5. [x] 占集成槽位 rebuild dev,浏览器确认面板显示「已索引 0 份文档」
|
||||
|
||||
## 验收标准
|
||||
|
||||
- [ ] 空项目 `GET /api/v1/projects/{id}/trace` 的 `index` 与 `recheck_marks` 为 `[]` 而不是 `null`
|
||||
- [ ] 登录后项目页不再出现「页面遇到问题」
|
||||
- [ ] `go test ./internal/traceimpact/...` 与 `web` 的 `projectTrace` 单测通过
|
||||
- [x] 空项目 `GET /api/v1/projects/{id}/trace` 的 `index` 与 `recheck_marks` 为 `[]` 而不是 `null`
|
||||
- [x] 登录后项目页不再出现「页面遇到问题」
|
||||
- [x] `go test ./internal/traceimpact/...` 与 `web` 的 `projectTrace` 单测通过
|
||||
|
||||
## 相关链接
|
||||
|
||||
- Checklist:
|
||||
- Handoff:
|
||||
- Test report:
|
||||
- Test report: [../../test-reports/2026-09-21-trace-panel-null-crash-test-report.md](../../test-reports/2026-09-21-trace-panel-null-crash-test-report.md)
|
||||
|
||||
## 证据 / 备注
|
||||
|
||||
|
||||
@@ -0,0 +1,70 @@
|
||||
# ProjectTracePanel 空追踪 JSON null 崩溃 测试报告
|
||||
|
||||
## 一、 测试背景 (Background)
|
||||
|
||||
阶段回溯合入 dev(schema 59)后,存量项目没有索引行。`ListIndex` / `ListOpenMarks` 返回 Go nil slice,HTTP JSON 写成 `null`。`ProjectTracePanel` 在登录后对任意已选项目渲染,读 `view.index.length` 抛出 `TypeError: Cannot read properties of null (reading 'length')`,ErrorBoundary 显示「页面遇到问题」。
|
||||
|
||||
## 二、 测试目标 (Test Objectives)
|
||||
|
||||
- 空项目的 `GET /api/v1/projects/{id}/trace` 中 `items`、`index`、`recheck_marks` 为 `[]`,不是 `null`。
|
||||
- 登录后项目页渲染「需求与影响 / 已索引 0 份文档 · 条目 0」,不再进入 ErrorBoundary。
|
||||
- 前端在收到历史 `null` 数组时仍规范成空数组。
|
||||
|
||||
## 三、 测试方案与环境 (Test Plan & Environment)
|
||||
|
||||
- OS:Linux;dev 容器 `agent-dev`,HTTP `:8080`,`agent_backend=pi-agent`,`schema_version=59`。
|
||||
- 单元:`go test ./internal/traceimpact/...`;`npx tsx --test src/api/projectTrace.test.ts`。
|
||||
- 冒烟:`go vet ./...`、`go test -short ./...`、`./scripts/env-service.sh dev rebuild`、`GET /health`。
|
||||
- 端到端:浏览器登录 dev 工作台,打开已有项目。
|
||||
|
||||
## 四、 预期结果 (Expected Results)
|
||||
|
||||
- 无索引数据时响应为 `{"hidden_count":0,"index":[],"items":[],"recheck_marks":[]}`。
|
||||
- 页面文案为「已索引 0 份文档 · 条目 0」,不出现「页面遇到问题」。
|
||||
|
||||
## 五、 实际测试结果与判定 (Actual Results & Evaluation)
|
||||
|
||||
### 用例 1:空项目追踪接口
|
||||
|
||||
- **测试输入 (Input)**:登录后 `GET /api/v1/projects/993975/trace`(项目名「受控工程研发项目 (dup-993975)」)。
|
||||
- **实际输出 (Actual Output)**:
|
||||
|
||||
```json
|
||||
{"hidden_count":0,"index":[],"items":[],"recheck_marks":[]}
|
||||
```
|
||||
|
||||
证据:[trace-empty.json](./assets/2026-09-21-trace-panel-null-crash/trace-empty.json)
|
||||
|
||||
- **评价判定 (Evaluation / Verdict)**:PASS。三个数组字段均为 `[]`。
|
||||
- **性能与耗时 (Duration & Latency)**:请求在同一次登录后立即返回,未计独立延迟。
|
||||
|
||||
### 用例 2:登录后项目页
|
||||
|
||||
- **测试输入 (Input)**:浏览器打开 `http://127.0.0.1:8080/`,账号密码登录,进入已选项目会话。
|
||||
- **实际输出 (Actual Output)**:页面正文包含「需求与影响 / 已索引 0 份文档 · 条目 0」;`页面遇到问题` 未出现。
|
||||
- **评价判定 (Evaluation / Verdict)**:PASS。ErrorBoundary 未触发。
|
||||
- **性能与耗时 (Duration & Latency)**:rebuild 后 `/health` 首次探测即成功。
|
||||
|
||||
### 用例 3:健康检查
|
||||
|
||||
- **测试输入 (Input)**:`curl -sf http://127.0.0.1:8080/health`
|
||||
- **实际输出 (Actual Output)**:`schema_version` 59,`agent_backend` `pi-agent`,`status` `ok`。见 [health.json](./assets/2026-09-21-trace-panel-null-crash/health.json)。
|
||||
- **评价判定 (Evaluation / Verdict)**:PASS。
|
||||
|
||||
## 六、 自动化测试套件汇总 (Test Suite Execution)
|
||||
|
||||
`go vet ./...` 通过。
|
||||
|
||||
`go test ./internal/traceimpact/...`:
|
||||
|
||||
```text
|
||||
ok chat-agent-system/internal/traceimpact 0.004s
|
||||
```
|
||||
|
||||
`npx tsx --test src/api/projectTrace.test.ts`:2 passed,0 failed。
|
||||
|
||||
`go test -short ./...`:`internal/server` 与 `internal/traceimpact` 通过。`internal/docgov`(`document_records_project_id_fkey`)与 `internal/notification`(`uq_projects_name_global`)失败,与本次 diff 无关,和 2026-09-20 rdev 种子热修记录的本机 dev 库既有失败相同。
|
||||
|
||||
## 七、 测试结论与后续优化建议 (Conclusion & Next Steps)
|
||||
|
||||
达到合入 dev 的标准:空追踪不再把页面打进 ErrorBoundary。`Analyze` 响应里的 `impacts` / `suggestions` 仍可能是 nil slice,当前前端没有消费方,不在本次范围。
|
||||
@@ -0,0 +1 @@
|
||||
{"status":"ok","env":"dev","agent_backend":"pi-agent","version":"v1.0","schema_version":59,"schema_ready":true}
|
||||
@@ -0,0 +1 @@
|
||||
{"hidden_count":0,"index":[],"items":[],"recheck_marks":[]}
|
||||
Reference in New Issue
Block a user