Files
Jyotisha/docs/tasks/PROGRESS-secondary-new-chat-intent-20260923.md
T
jesse-uxandClaude Code 8902e48468
Independent Staging Quality Gate / validate (push) Successful in 13m41s
Independent Staging Quality Gate / publish (push) Successful in 3m30s
fix(chat): honor new-chat intent from secondary pages
Create a fresh local consultation for explicit new-chat navigation and keep reserved recovery from taking over its landing. Add regression tests and record validation gaps for remote review.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-09-24 00:25:28 +08:00

9.7 KiB
Raw Blame History

PROGRESS · 次级页「新建对话」意图(2026-09-23)

结论与交付边界

实现与定向独立复核完成;完整验收尚未完成。2026-09-24 产品明确要求先 push 供远程 review,本次提交交付 staging;推送成功与远端 SHA 以实际核对回报为准,不以提交本身冒充部署成功。不提升 main、不改 workflow/DNS。BUG-1015 暂记 blocked(已本地修复,构建/受控真人证据未闭环),不按任务书预先指定的 resolved 提前结案。

项目 值
任务书 docs/tasks/TASK-secondary-new-chat-intent-20260923.md
实测基线 origin/staging = 1c95eb397(已 fetch;任务书原基线之后仅任务文档)
执行分支 codex/secondary-new-chat-intent-20260923
工作树 .worktrees/secondary-new-chat-intent-20260923
BUG 编号 开工最大 BUG-1014,本单 BUG-1015
固定构建基线 本工作树下 .worktrees/secondary-new-chat-baseline-20260923,detached 1c95eb397
原始日志 本地 artifacts/secondary-new-chat/,不纳入提交
真人清单 docs/testing/secondary-new-chat-20260923.md

已实现

  • T1:chat-session-url.ts 唯一生成/解析新建意图;参数按存在性识别(?new=1、?new=、?new 均有效),优先于合法/非法/未加载的 c 及登录存根,missing=false。所有 sessionHref 都消费 new,保留无关参数。
  • T2:首页复用原 starter 创建分支,不重复拼装会话,不新增状态/ref;激活前清 URL,按既有 clearStoredReturn 清存根。
  • T3:只改只读侧栏既有新建链接,仍经 SidebarMenuLink → AppLink,仍关闭抽屉;首页按钮、账户页脚、品牌标记不变。
  • T4:更新 BUG_HISTORY、CHANGELOG、DESIGN、任务状态板、BLOCKED、本进度与真机清单。没有新增产品文案,VOICE 无需修改;Skill 不 bump。
  • 补修 D7:旧 reserved 咨询仍执行真实恢复逻辑并保留 pending/recovering,之后新建意图重新取得活动落点并清启动恢复提示。无 new 时不改变恢复行为。

决策、勘误与偏离

  1. 追加授权而非擅自破红线:独立验收首次发现 restoreConsultationRecovery() 无条件激活旧会话,导致新建路径被覆盖。主会话向产品说明超出“一行”范围,产品明确选择“一并修复”。已在 TASK D7 记录:仅首页额外四行保护,首页总计 +5 行,无新增 state/ref,不改恢复 hook 或后台任务,不取消请求。
  2. T2“激活前清理”与“放在 replace-clear 邻行”原描述冲突;以明确时序为准,清理放在 setActiveSessionId 前。
  3. 当前品牌行无任务书所说的 AppLink,只是 div/span/strong,不补造入口。默认会话也可能受收藏及返回存根影响,不扩大修改无参数首页规则。
  4. 空历史启动已有兜底会创建一个本地空咨询,再执行新建分支会产生另一个本地空对象;两者均不落库、不显示于历史。本单按“new 恒新建”要求保留,不另改会话状态流。
  5. 任务书预写 resolved 与事实证据冲突:完整构建/真人/部署未完成,按 AGENTS 诚实边界暂记 blocked。
  6. 测试数量按 BUG-995 / frontend AGENTS 比较名称多重集合,不仅看汇总尾行。没有把既有失败当通过。

历史检索与保护

开工只读代理按现象、入口、模块及 /api/sessions 检索并完整读取相关记录:BUG-744、745、927、928、987、989、705、967、995 等。

  • BUG-744 单一侧栏与只读同构仍由 sidebar-contract 守护。
  • BUG-745 的旧 sidebar-data-cache 已被 BUG-927 共享 (app) / SessionListProvider 替代,不恢复旧缓存;客户端导航、provider 生命周期合同仍在。
  • BUG-989 本地新建、首问 persistSession(create)、创建成功才写 c、列表无 draft 与咨询专用过滤均仍在。
  • BUG-705 未列出合法深链仍 lookup,不受 new 分支之外的行为影响。
  • 本次原测试没拦住:只锁住了“导航方式”和“无参数默认落点”,没有验证跨页新建意图;补上组合与真实恢复冲突验证。

验证数字

检查 改动前基线 最终补修后 结论
tsc --noEmit 0 错 0 错 通过
npm run lint 0 error / 119 warning 0 error / 119 warning 通过;不顺手修 warning
全量测试总数 3708 3717 +9
全量 pass 3619 3628 +9
全量 fail 89 89 失败名单无增减,不是全绿
cancelled / skipped 0 / 0 0 / 0 不变
顶层 TAP 名称 3690 3699 删除0、新增9
全部含子测试名称 3708 3717 多重集合删除0、新增9,新增全通过
本轮定向(8文件) — 95 pass / 0 fail 通过
独立新增恢复测试 — 2 pass / 0 fail 通过
独立内存变异(3种) — 每种1 pass / 1预期fail 删除保护/只删落点/只删提示清理均被捕获
首页增长 基线 +5行 / state+0 / ref+0 D7已授权,增长合同通过
next build Static 未完成 未完成 环境缺口
首屏 gzip ±2% 未测得 未测得 环境缺口,不报推测数字

命令及日志:

  • ./node_modules/.bin/tsc --noEmit → baseline-tsc.log / final2-tsc.log。
  • npm run lint → baseline-lint.log / final2-lint.log。
  • npm test → baseline-test.log / final2-test.log;compare-tests.cjs final2 → test-comparison.json(名称、失败名、基础诊断字段)。
  • 定向:chat-session-url、home-bootstrap-reveal、sidebar-contract、new-chat-recovery、session-lookup-unlisted、session-list-filter、chat-session-authority、home-shell-growth-contract → final2-focused.log。
  • 最初先加测试验证红灯:未实现新导出导致URL测试无法载入,落点/只读链接断言失败;随后实现转绿。未将该次红灯当作“全部9条都单独复现”。
  • 第一次备用基线构建与新增测试编辑重叠,在类型阶段读到尚未实现的新导出,该次日志无效,不充当基线;已另建固定提交隔离工作树重新构建作为有效对照。

最终 baseline-test.log 与 final2-test.log 已独立逐项复核:89/89 完整 TAP 失败诊断(多行 error、expected/actual/operator、code、failureType、完整栈)在只归一化耗时、PID/时间戳、随机临时目录及经 SHA-256 验证的路径派生哈希后相同,未抹栈或行号。既有测试状态变化0。code分布两侧均 ERR_TEST_FAILURE49 / ERR_ASSERTION32 / ENOENT4 / EPERM4。41/41 Docker 项目均对应各自 daemon 地址池耗尽输出;4个文件加载前置stderr归一化后也一致。原始完整诊断有51项随机值变化;Compose附带进度/包装有6/41项差异,但失败原因不变,不宣称原文逐字一致。

最终既有失败类别 数量
Docker默认网络地址池耗尽 41
symlink EPERM(含子进程/文件加载) 13
Windows重复盘符路径ENOENT 4
methodology解析断言 9
迁移读取到链接目标字符串而非SQL 5
其他既有脚本/环境断言 17
合计 89

其余17项涉及备份边界6、数据库环境校验3、部署环境校验3、缺rsync2、install权限1、YAML子进程9009共1、docs-only-range子进程49共1;日志不足以进一步确定所有退出码底因,不擅自修复或笼统归因。

既有断言变更表

原值 新值 原因
只读侧栏测试仅守同构、无菜单、页脚 /、无写请求 保留全部原断言,追加 .new-chat 必须调用 newChatHref 且关闭抽屉、不得字面量 / 锁定新建语义,不弱化旧合同
其余既有断言 不变 新增9个测试,无删改或重命名既有用例;sibling 参数原断言也未改

新增测试:URL 5、落点2、reserved恢复2;恢复测试执行真实函数与首页区块,不仅做正则存在性断言。

环境缺口与后续验收

  1. 复用本机 node_modules junction;根工作树 lock 与基线 lock 文件不同,但逐项核对顶层已安装非可选包版本与本单 lock 相符,没有安装/升级依赖。默认 Turbopack 报依赖链接超出 filesystem root;没有为此改 next.config。
  2. 固定基线与最终均补跑官方 npm run build -- --webpack。编译及构建内类型检查成功,页面数据收集创建 Skill SKILL.md 符号链接报 EPERM。有效基线日志 baseline-isolated-build.log、最终 final2-build.log。不修改 Skill 权限或禁用检查,Static/gzip 缺口保留。
  3. Docker daemon 有响应但默认网络地址池耗尽;数据库 fixture 无法创建网络,未真正运行SQL。本单无数据库变更,不运行单独 test:db、不清理共享网络。
  4. 没有本轮受控登录浏览器证据,移动抽屉/首问网络/真实恢复按真人清单补验。存在本机浏览器与否不等于已有受控登录态,不冒称“无Chrome”或“浏览器通过”。
  5. 2026-09-23 实现完成时未 commit/push;2026-09-24 产品明确授权推送供远程 review,已重新 fetch,远端仍为 1c95eb397,BUG-1015 未被其他单占用,符合快进交付前置条件。此次只提交本单代码/测试/记录,不包含 artifacts 或依赖链接;Gitea 门禁及部署仍须独立核验。
  6. 推送前按 §9 运行 pre_work_check:本机 python3 launcher 退出49;改用已有 Python 3.11.7 执行,远端 verified、适配器与碎片扫描步骤成功,但 focused 22通过/2失败:既有 .workbuddy 镜像路径断言,以及 candidate_count=4 不满足 workspace_residue_count=29 的数量断言。未伪造镜像或改治理测试以消红;不把整体预检写成通过。日志在本地 push-pre-work-python.log,同步追加错误台账。