49 lines
3.2 KiB
Markdown
49 lines
3.2 KiB
Markdown
# 修复标题显示归属
|
||
|
||
## 目标
|
||
|
||
确保会话内标题条显示在目标消息上方,并修复旧标签页继续运行过期前端脚本
|
||
导致修复看似失效的问题。
|
||
|
||
## 验收标准
|
||
|
||
- 标题显示在 `anchorMessageIndex` 指向的消息上方;示例事件中应显示在
|
||
数组索引 0 的目标消息上方,而不是按 `messageIndex = 1` 插在其后。
|
||
- 同一份标题事件在实时追加和会话重载后得到相同位置。
|
||
- 缺少新锚点字段的历史标题事件仍按兼容规则稳定显示。
|
||
- 已加载本次版本自检逻辑的页面,在后续服务升级后能检测资源版本不一致并
|
||
自动刷新一次;机制上线前已打开的旧页面需要手动刷新一次。
|
||
- 相关定向测试及项目质量检查通过。
|
||
|
||
## 阶段计划
|
||
|
||
1. **DONE** — 初始化任务并记录现象与验收条件
|
||
2. **DONE** — 追踪标题事件生成、持久化与渲染链路
|
||
3. **DONE** — 编写失败回归测试锁定旧前端版本刷新
|
||
4. **DONE** — 实现前端版本自检并保持标题锚点兼容
|
||
5. **DONE** — 运行标题与版本链路定向测试
|
||
6. **DONE** — 运行前端相关质量检查
|
||
7. **DONE** — 审查差异并完成任务记录
|
||
|
||
## 决策
|
||
|
||
- 不以 CSS 位移掩盖问题,优先统一标题事件的语义锚点。
|
||
- 标题锚点源码、数据与运行态静态文件均已正确,不重复改写排序算法。
|
||
- 以当前 `app.js` 内容指纹作为前端资源版本,由服务端动态注入页面并在
|
||
WebSocket 鉴权成功时下发;客户端版本不一致时只触发一次刷新。
|
||
- 先补失败测试再修改实现,锁定版本注入、握手与单次刷新契约。
|
||
|
||
## 已遇到错误
|
||
|
||
| 错误 | 尝试 | 处理 |
|
||
|---|---:|---|
|
||
| Trellis 新建任务后没有自动生成 `prd.md` | 1 | 已按工作流要求显式创建需求文档 |
|
||
| `codebase-memory-mcp search_code` 返回 `Transport closed` | 3 | 停止重复调用,使用已取得的函数级结果并降级到 `rg` 补查静态资源与事件路径 |
|
||
| 运行态静态文件比对命令因包含 `rm -f` 被安全策略拒绝 | 1 | 改用纯管道读取与哈希,不创建或删除临时文件 |
|
||
| 首个失败回归实现代理运行超过 6 分钟且未产生差异或测试进程 | 1 | 已中断,改派更窄的最小可执行专项测试任务 |
|
||
| 第二个窄化实现代理仍未进入编辑阶段且无差异 | 2 | 已中断;Trellis 实现代理通道不可用,主线程加载同一上下文后降级实施 |
|
||
| 首次绿灯运行仅“服务端入口注入”静态契约失败 | 1 | 实现使用占位符常量而测试要求字面量;改为字面量替换,保持行为不变并对齐可审计契约 |
|
||
| 首次运行态专项未读到注入后的全局版本 | 1 | 发现占位符与全局属性名相同,`replaceAll` 同时改坏属性名;改用不含占位符的 `window.ccWebFrontendAssetVersion` |
|
||
| 首次全量回归的外层执行提前返回,无法取得子进程退出码 | 1 | 用直接 Node 调用并通过 `write_stdin` 等待会话,取得 `REGRESSION_EXIT=0` |
|
||
| Trellis 质量复核代理超过 5 分钟未回传、无新增差异或测试进程 | 1 | 已中断,主线程按同一 check 上下文完成逐行差异审计 |
|