Files
Endoleap/VALIDATION.md
T

65 lines
7.4 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.
# Canvas V2 验收记录(2026-11-06)
## 前端检查
- `npm run typecheck` 通过。
- `node --experimental-strip-types --test tests/*.test.mjs`:69 项测试通过,覆盖既有行为、V2 无损往返、端口方向与曲线字段校验、投影与逆变换、局部/远端三方合并、草稿兼容、八向 Shift 等比、LCA 连接计划和父子共同拖动不重复位移。
- `CANVAS_UI_TOOLS=/private/tmp/endoleap-ui-check node tests/canvas-ui-check.mjs`:真实 React Flow + DOM 事件回归通过,使用临时安装的 esbuild/jsdom,不访问浏览器。
- DOM 覆盖:旋转与撤销重做、三图标标签切换、八向手柄、连线选择/曲线点/marker/动画;子画布独立读取与保存、收起/展开、创建及撤销重做;模型按输出类型过滤、文本传播、图片原节点回写、取消与生成期间保留几何。
- 新跨图连接以实际 Handle 鼠标事件触发,验证能力门槛、最低共同祖先、准确的所有参与版本,以及已经提交但丢失响应后的相同 body/key 重试;不会重复创建端口或边。
- API 冒烟覆盖 V2 Accept/If-Match/Idempotency-Key、子图/连接/运行命令白名单、事件分页参数、带 Cookie 的图片二进制响应、MIME 限制、multipart 上传、原有 OAuth/会话/同源校验和 5 MiB 限制。
- 隔离生产构建 `npm run build -- --webpack` 及最终 `node tests/api-smoke.mjs` 均通过;构建在临时副本执行,不改变正在使用的开发服务器产物。
## 后端与测试画布证据边界
用户交付 Core `b4e537b` 部署、ECS CI #912/#913,以及 `/Users/zzyang/foundry-canvas-v2-migration-summary.json`:指定父画布版本 209→210,1 个真实子画布、2 个显式成员,11 个节点和 2 条边保留;重新读取和幂等验证通过。
用户提供的隔离后端真实模型验收包括文本生成和 PNG 图片产物;本轮前端没有再次调用线上模型、修改测试画布或重复迁移。模型 ID 在运行时读取,不硬编码验收 ID。
新增 connections 扩展已对照用户提供的接口说明和本机 Core `07fd678` 源码实现;主线合并为 `630ed42`。生产是否可调用以 capabilities.subgraphs.connections=true 及后端部署确认作为门槛,不把文档或合并本身当作已部署。
## 限制和交付状态
- 按用户约定未访问项目浏览器,未进行视觉布局、真实拖动手感与真实登录会话的浏览器验收。
- 子图关系备份不能作为普通单图快照导入其他画布;导出包含完整 owner 文档集合,避免仅备份父图或重复保存投影。
- 网络未知结果保留请求并暂停编辑;普通版本冲突保留本地草稿,不强推覆盖。
- Headless 库尚未创建,提取方案已改写在本地忽略的 docs/HEADLESS_CANVAS_API_DRAFT.md;已替代的分区/元素/后端需求文档已清理。会话策略文档仍保留。
- 原有 next-env.d.ts、pnpm-lock.yaml 和 pnpm-workspace.yaml 不属于本次交付,保留未提交。
## 侧栏目录与加载性能修正
- 侧栏通过 include_subgraphs=true 和完整分页展示嵌套子画布;支持展开/收起、活动路径、搜索保留祖先,关系事务完成后刷新。
- 空闲 AI 查询降至 30 秒、任务期间 1.2 秒;隐藏标签页暂停,返回或本地命令后唤醒;空响应不重渲染。
- 编辑器拆成动态模块,与元数据/快照并行加载;成功 Canvas GET 代理采用流式转发。
- 实际证据、性能边界及未执行的公网/浏览器验收见 PERFORMANCE.md;不将本地模拟测试当作公网提速实测。
- 本次最终检查通过:TypeScript、73 项单元测试、React Flow DOM 全量回归、隔离 Webpack 生产构建及 API 冒烟(含上游响应体暂停时首段透传、目录分页参数)。
## 传输中断与只读打开修正
- 大快照分离响应头、正文总时限和正文空闲时限;加入仅含时间/计数的传输、保存和 dirty 字段诊断。
- JSON 读取失败不再吞成 null;区分传输中断、不可解析响应和真实快照校验失败。
- 内容指纹忽略单独的 viewport 变化;视角保存在本机,初始化与缩放不会上传快照。浏览器日志已确认原误保存字段仅为 viewport。
- 新增慢正文、空闲超时、请求取消、失败 200、204、视口浮点与真实内容保存的测试;DOM 覆盖父/子图打开与缩放零 PATCH。
- 用户完整读取已成功(父图 477,385 字节),但链路样本仍有 2.66–32.75 秒波动;ECS/公网对照尚待补充,详见 PERFORMANCE.md。
## 附件与预览修正
- 新图片使用受管附件;旧图仅在用户明确点击后迁移,字节保持原样,快照不保存预览地址。
- 单元测试增加字节一致性、重复图片去重、幂等重试、失败不替换、V1 兼容和渲染 URL 分离;共 84 项通过。
- DOM 回归确认只读打开/缩放零 PATCH、显式迁移一次上传、位置和边不变、画布使用预览而快照保存原图引用;原有 AI/子图/连线回归通过。
- 同步 TCP/数据库证据及隐私边界见 PERFORMANCE.md。Core PR #15 已由用户合并为 b2ae48e;分支/PR CI #936/#937、主线检查 #940 和部署 #941 全部成功。用户已明确执行迁移与重开,生产验收完成:父图版本 252→253,两张原图 SHA-256 一致,节点/内容/边哈希一致;数据库 JSON 477,397→3,708 字节。成功重开请求 219.6ms(正文 1.3ms),独立图片 551.2/1,354.9ms,随后无新增保存且版本保持 253。另一次零正文取消请求与网络波动限制见 PERFORMANCE.md。
- 最终前端检查:TypeScript、84 项测试、完整 DOM 回归、隔离 Webpack 构建和 API 冒烟均通过(包括 15.2 秒慢正文、原图/预览参数及响应头)。
- 最后补充:图片按需加载/异步解码;优化提示保持到版本保存确认后才消失,并阻止与新图片上传重叠。延迟保存的 DOM 回归和最终隔离构建通过。
## 临时迁移功能清理
指定生产画布完成迁移验收后,按用户要求移除“优化图片加载”入口、专用 Hook 状态和 Base64 迁移辅助函数。保留正常附件上传、原图引用及独立预览。类型检查、4 项附件单元测试、完整 DOM 回归通过;DOM 覆盖旧内嵌图片无迁移按钮/无后台上传、只读打开零 PATCH,以及既有 AI/连线/子图功能。此次删除变更未重复执行生产构建;此前隔离构建结果保留为历史记录。
## 跨分区同步优化
- TypeScript 和 83 项单元测试通过。新增 DOM/Hook 场景覆盖:原子成员移动一次 POST/无前置 PATCH、延迟响应期间编辑和拖动其他节点、快照合并保留编辑、撤销/重做保留单一归属、丢失响应以相同 body/key 重试、412 重读版本后新命令重试、连续跨分区移动排队、旧后端兼容。
- 实际 ReactFlow DOM 手势验证 icon 跨分区后出现元素旁同步提示,无整屏同步遮罩;其他元素可继续拖动,服务器确认后位置不回退。既有 AI、连线、框、图片回归通过。无浏览器访问(沿用用户要求)。
- 最终隔离生产构建通过。Core push #946、PR #947、主线 #949、部署 #950 均成功,包含 Go 测试/构建、数据库迁移和 PostgreSQL 集成测试;PR #16 已合并为 2207c85 并部署。Core 不在本机编译。真实 icon 拖放验收仍待用户操作后的记录核对,不将发布成功当作实际性能实测。