Files
cc-web/.planning/2026-08-16-goal-bubble-rendering/progress.md

155 lines
7.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Progress Log: Goal 气泡显示修复
## Session: 2026-08-16
### 阶段 1:建立现状基线并固化 Goal 交互契约
- **Status:** complete
- **Started:** 2026-08-16
- Actions taken:
- 读取主题、文件规划和 TODO CSV 技能说明。
- 执行规划会话恢复检查,未发现需恢复的输出。
- 记录 Goal 从 Slash 命令到 `system_message` 再到大面板样式的完整原因。
- 固化用户气泡、短暂同步提示、精简成功提示和刷新持久化要求。
- 确认 Slash 路由位于普通消息持久化之前,并找到 `session_message` 与 `ccwebDisplayOnly` 复用契约。
- Files created/modified:
- `.planning/2026-08-16-goal-bubble-rendering/task_plan.md`
- `.planning/2026-08-16-goal-bubble-rendering/findings.md`
- `.planning/2026-08-16-goal-bubble-rendering/progress.md`
- `Goal 气泡显示 TO DO list.csv`
### 阶段 2:审查实施计划并修正关键缺口
- **Status:** complete
- **Started:** 2026-08-16
- Actions taken:
- 准备独立、无会话历史的计划审查上下文。
- 首轮审查发现独立持久化、去重、失败顺序与负向回归断言不足。
- 已将 display-only Goal 消息、稳定命令 ID、禁止普通模型链路及失败语义写入实施计划。
- 第 2 轮独立审查已通过,无阻断实施的问题。
- Files created/modified:
- `.planning/2026-08-16-goal-bubble-rendering/task_plan.md`
- `.planning/2026-08-16-goal-bubble-rendering/findings.md`
- `.planning/2026-08-16-goal-bubble-rendering/progress.md`
### 阶段 3:增加 /goal 用户气泡发送与持久化契约
- **Status:** complete
- **Started:** 2026-08-16
- Actions taken:
- 新增前端 `isGoalSetCommandText()`,仅为设置型 `/goal` 发送 `clientMessageId`。
- 新增服务端 display-only Goal 展示消息持久化与稳定 ID 去重 helper。
- 通过 `session_message` 推送目标正文,避免复用普通 `handleMessage()` 运行时链路。
- Files created/modified:
- `public/app.js`
- `server.js`
### 阶段 4:将 Goal 同步和成功反馈改为短暂精简提示
- **Status:** complete
- Actions taken:
- 同步、设置、暂停、恢复、清除反馈改为 transient 系统提示。
- 设置/暂停/恢复成功反馈只显示状态和 token 统计,不再回显完整目标正文。
- RPC 启动后失败保留已提交气泡,不恢复草稿;前置校验仍保留恢复语义。
- Files created/modified:
- `server.js`
### 阶段 5:补充 Goal 气泡及消息协议回归测试
- **Status:** complete
- Actions taken:
- 增加前端设置型 Goal 识别与 payload 契约断言。
- 增加 session_message、display-only 元数据、成功文案、短暂属性和命令 ID 去重断言。
- 更新旧的“完全不持久化 /goal 用户消息”断言为新的展示消息契约。
- Files created/modified:
- `scripts/regression.js`
### 阶段 6:运行语法、专项和全量回归
- **Status:** complete
- Actions taken:
- 已通过 `node --check public/app.js`、`node --check server.js`、`node --check scripts/regression.js`。
- 已通过 `timeout 60s npm run regression`,输出 `Regression checks passed.`。
- Files created/modified:
- 无
### 阶段 7:执行真实浏览器桌面与窄屏验收
- **Status:** blocked by environment (not a code blocker)
- Actions taken:
- 确认 PM2 `ccweb` 服务在线并监听 `8002`。
- 确认运行服务返回新前端脚本,普通用户气泡 CSS 仍保留右对齐布局。
- 按仓库规则检查运行会话,发现另一个 `/home/cc-web` 会话正在运行,因此未执行重启。
- 检查本机浏览器工具,未找到 Playwright、Puppeteer 或 Chromium 可执行文件。
- Files created/modified:
- 无
- Limitation:
- 未能完成真实浏览器桌面/窄屏截图与像素验收;功能与隔离回归已完成,后端新逻辑需在允许重启且有浏览器的环境做最终视觉确认。
- Concurrent work:
- 另一个运行会话同时修改了 `public/app.js` 与 `scripts/regression.js` 的侧栏折叠逻辑;未回滚,已通过当前工作树下的回归。
## Test Results
| Test | Input | Expected | Actual | Status |
|------|-------|----------|--------|--------|
| JavaScript 语法 | `node --check` 三个目标文件 | 无语法错误 | 全部退出 0 | passed |
| 全量隔离回归 | `timeout 60s npm run regression` | 回归通过 | `Regression checks passed.` | passed |
## Error Log
| Timestamp | Error | Attempt | Resolution |
|-----------|-------|---------|------------|
| 2026-08-16 | 仓库内 `todo-list-csv` 技能短路径不存在 | 1 | 使用技能清单中的实际安装路径 |
## Session: 2026-08-18
### 阶段 7:执行真实浏览器桌面与窄屏验收
- **Status:** complete(剩余验收已转移至阶段 14)
- Actions taken:
- 用户在真实桌面界面确认 Goal 正文已经显示为普通用户气泡。
- 用户指出气泡缺少“目标模式”标记,并确认 Goal 会话标题没有自动更新。
- 将新增缺陷纳入同一任务,最终窄屏和主题验收统一放到阶段 14。
### 阶段 9:定位 Goal 标记与自动标题链路
- **Status:** complete
- Actions taken:
- 执行 session catchup 并恢复上一轮 Goal 实施与验证记录。
- 核对当前工作树,识别并隔离另一项 Codex App 重试修复的未提交改动。
- 直接调用当前会话的 `ccweb_set_title` 成功,确认标题 MCP 可用;`/goal` 缺少的是服务端旁路联动。
- 完整读取主题架构与经验教训,确认只为 Goal 用户消息增加专用标签样式,不扩散到普通气泡。
- 完整读取 Trellis 工作流并确认当前没有活跃 Trellis task;将在实现前补齐任务资料与独立实现/检查环节。
- 使用 codebase-memory 确认索引就绪,并定位 Goal 渲染、Slash 处理、标题锁定和标题广播函数。
- 读取精确函数源码,确认 Goal 元数据可在统一消息渲染入口生成标签,标题可在 display-only 消息保存周期内派生并实时广播。
- 交叉核对 CSS、缓存版本和现有 Goal 回归位置,确认主题 ID 为 `wasteland`,样式版本需随 CSS 修改推进。
- 确认 Goal thread 已注入 `mcp_servers.ccweb`;标题未变化源于 `thread/goal/set` 不会自动触发工具,而非 MCP 注册缺失。
### 阶段 10:审查增量实施计划并修正缺口
- **Status:** complete
- Actions taken:
- 第一轮独立审查指出计划缺少 `session_renamed` 实时事件要求,仅广播列表会让顶部标题保持陈旧。
- 已补充 `session_renamed` + `session_list` 双事件及其回归断言;第二轮完整复审通过。
### 阶段 11:实现目标模式气泡标记
- **Status:** in_progress
- Actions taken:
- Trellis 任务 `08-18-goal-mode-title` 已建立、启动并通过上下文校验。
- 实施前重新核对目标文件差异,只有 `scripts/regression.js` 含另一任务改动,已记录不可覆盖区块。
- 检查本地运行服务与浏览器能力:服务在线且 no-store,本机有 Firefox 可做后续 headless 验收。
- 完整读取 `create-cc-web-theme` 验收清单,已将与本次消息层级相关的浏览器、缓存、响应式和隔离项纳入收尾门禁。
- 进一步核对标题事件与清洗实现:事件 payload 需显式带 sessionId;derived 来源已被会话规范接受;标题截取不能复用带截断标记的持久化 helper。
- 确认 mock 可验证 Goal thread 的 ccweb MCP 配置,并规划在现有 Codex App 回归中使用独立默认标题会话。
## 5-Question Reboot Check
| Question | Answer |
|----------|--------|
| Where am I? | 阶段 3:增加 /goal 用户气泡发送与持久化契约 |
| Where am I going? | 计划审查、实现、回归、浏览器验收与差异清理 |
| What's the goal? | 把设置型 `/goal` 改为持久用户气泡,并收敛系统反馈 |
| What have I learned? | 见 `findings.md` |
| What have I done? | 已完成原因定位与任务规划 |