Files
ycode/docs/协作/B01-交付-01.md
T

7.8 KiB
Raw Blame History

B01 交付 01:问答分发、嵌套折叠与回答内容壳

日期:2026-10-21。开发端接单;已实现、离线自测通过,待指定提交的独立验收,不关闭 A01/A03/A04。

范围、授权与版本

  • 用户确认:开发端先接 A01、A03、A04 问答与折叠修复;保留撤回骨架修复的决定。用户答复“对”。
  • 基线完整 SHA:21ca0e0fc379e7a71639b5160c1b7cd168b9d6fa,开始时 master 源码工作区干净。
  • 需求入口:Windows 复测与后续开发 A01、A03、A04;完整方案 第三节;协作流程见同目录文档。
  • 完整代码 SHA:51531dcae8d8ade85db9e203bc8c0f712805b2ae。 开发主对话与独立代码审查已完成;本记录另行文档提交,代码提交不包含本记录。
  • 唯一交接源 gitea/master;推送状态以交接通知及远端 SHA 核验为准。验收应等待开发端明确通知代码 SHA。
  • 不做:A02、A05~A09;不恢复撤回的 6956e47 骨架补丁;不改内核、依赖锁文件或历史数据;不启动外部模型、SDK query/CLI 或真实授权服务。

正式需求同步与本次分阶段交付

推送前同步发现验收端新增 f2b7c07,正式 B01 需求覆盖 YC-001~YC-004。本次按用户先行确认的 A01/A03/A04 范围,只交付 YC-001 第一阶段,不是 B01 全量完成;未改写或缩减正式需求。YC-002(A02)、YC-003(A05~A08)、YC-004(A09)均未在本轮实施,保持待开发/待验证。新增远端提交仅为需求与协作文档,已正常合并,产品源码仍与上述受测代码 SHA 相同。

YC-001 对照:AC1.1/AC1.2 身份与完整轨迹已有离线证据;AC1.3/AC1.5 嵌套与隐藏内容已有 DOM 证据;AC1.4 结构和样式参数已有源码断言。所有真实 Windows 截图/布局要求仍待独立验收,不将离线结果记为正式关闭。

改动与实现边界

  • A01:共享 isQuestionToolName 做只读身份匹配,原生 AskUserQuestion 和既有小写别名进入问答卡;MessageBubble 分类与 renderer 使用同一身份层。普通工具仍走原匹配/原始输出通道,存储名称、参数、metadata 不被改写。既有投影、历史导入和未知位置算法未修改。
  • A03:CompletedFold 持有仅属于该消息的 disclosure store;按稳定 part/tool ID 与控件槽位保存状态,无 ID 的旧 part 保留位置 fallback。问答、普通工具、思考、局部摘要、MCP 明细、Task 与 Plan 展开状态在外层结构重排后恢复;不同消息不共享。仍采用既有时间顺序/正文锚点模型,不复制隐藏组件树、不恢复全局展开布尔值。Task 审批状态未迁移或放宽。
  • A04:标题使用既有 SourceToolHeader/chevron,位于独立问答内容壳外;去掉旧 ?、+/-、外层灰底与分隔边框。内容复用已恢复 ToolExpandable CSS:16px 圆角、12px 16px padding、主题背景、300px 上限和纵向滚动。保留问题/答案 14px、400、1.75;键盘 Enter/Space、aria-controls、aria-hidden、inert 均有回归。
  • 原版依据仅引用已有证据:WorkBuddy 5.8.3 目标截图及历史 5.8.2 REA 提取范围;tool-result-source.css 中 JavaScript Evidence ev_717fa5e846e64d67ac19c8925d121bff632c0d3aefb3603b10858559cabb2dcb,CSS Evidence ev_377c8790468b3c67dad8577aabb327f98d3140659f0fffdbabfcff5a40cc9e94。未新增原版采集,也未直接读取原版安装包或调试端口。

验收矩阵与复现

项目 可重跑场景/证据 本轮状态
A01 原生名称完整链 question-identity-regression.tsx:真实 MessageBubble,原生名称待答→已答→完成→展开→收起重开,无 RAW SDK ANSWER jsdom 已通过;真实 Windows 待验
A01 兼容与不可变性 原生/小写别名、导入答案、关联去重、无 parts 未知位置标签与单份展示;普通工具原始输出和输入快照不变 SSR+jsdom+导入回归通过
A03 嵌套状态 completed-fold-nested-regression.tsx:真实 CompletedFold+问答/普通工具/ThinkingBlock/ToolGroup/Task/Plan,外层切换、后续事件、独立局部组、流式→完成、消息 ID 隔离 jsdom 已通过;真实 Windows 待验
A03 可访问性 外层 Enter/Space 切换,收起内容 inert/aria-hidden;不复制问答节点 jsdom 已通过
A04 内容壳 question-answer-shell-regression.tsx:标题不在内容壳内、复用 CSS 参数及主题变量、无旧符号/边框;链接与键盘行为 SSR/CSS 来源断言+jsdom 通过;非布局像素结果
整体构建 npm run build 含两个 tsconfig 类型检查 Linux 通过,不代表 Windows 安装/Electron 通过
Windows/原版对照 固定代码 SHA、浅/深主题、窄窗、相同窗口/缩放/字体、回答长内容滚动 未验证,待验收端

环境与命令

Linux x86_64,Node v24.19.0,npm 11.9.0。主项目使用已安装依赖(此前 ignore-scripts 安装,Electron 无 GUI);没有更改 package.json/package-lock.json。DOM 依赖 jsdom 30.1.3 独立安装在 /tmp/ycode-b01-dom,--ignore-scripts,不混入交付依赖。DOM 依赖从官方 npm 安装;测试运行不调用外部模型。

# 仅验收者缺少 DOM 依赖时,按其安装授权独立安装;不改项目依赖
npm install --prefix /tmp/ycode-b01-dom --ignore-scripts --no-audit --no-fund jsdom@30.1.3
YCODE_TEST_DOM_MODULE=/tmp/ycode-b01-dom/node_modules/jsdom npm run test:alignment
npm run test:conversation
npm run test:workbuddy-import
npm run test:artifacts
npm run build
git -c core.whitespace=cr-at-eol diff --check

以上最终命令退出 0。对齐 runner 的宿主/SDK 接口部分是 mock,明确不启动真实 SDK/CLI;运行这些测试不构成 A09 授权验收。新 DOM 脚本等待断言、unmount 与 DOM close 后显式退出,避免既有 renderer imports 的长驻句柄使成功测试超时。两份原有 CRLF 源文件保持行尾;diff 检查用单次 cr-at-eol 选项,未改 Git 全局配置或批量归一化。

可复核证据:本轮命令及输出摘要,测试源码均纳入交付,不依赖开发机 .tmp 作为唯一证据。初次开发中的类型错误、测试选择器错误和测试退出句柄问题已修正并重跑;最终结果以该摘要与指定代码 SHA 为准。

独立 Windows 验收步骤与阻塞

  1. 收到完整代码 SHA 后,在干净的固定 SHA 检出独立 npm ci --legacy-peer-deps、npm run build,记录系统/Node/npm/目录/实际启动端口。
  2. 真正启动前检查 src/main/index.ts 数据初始化逻辑;在同一 PowerShell 中设置全新绝对 YCODE_USER_DATA_DIR(如 C:\ycode-qa\B01-run01),只用脱敏夹具和专用 workspace,确认进程继承变量。
  3. 重跑上述离线测试;以原生名称构建待答/已答消息,完成后打开外层,分别操作问答、工具、思考、两个局部摘要,再收起重开并追加事件;确认选择独立保留、正文顺序未变。
  4. 用真实 Windows Electron 计算样式与截图复核 A04:标题在灰卡外、问题/答案 typography、16px/12px 16px、长内容滚动,浅深色及窄窗;对照既定原版版本/同状态截图。
  5. 原 Windows window-report.json、answered-expanded.png 等只在历史 .tmp 中,本环境没有这些附件。请验收端提供/定位原附件并记录 REA/截图索引;未拿到相应证据不得宣称完整 1:1 或像素通过。

状态:已本地提交、待推送通知与独立验收。本批实现无 mock 问答替代逻辑;测试夹具是模拟消息,不是真实模型请求。Windows、安装包、真实 SDK 与当前原版像素对照均未执行。