Skip to content

Latest commit

 

History

History
165 lines (118 loc) · 7.13 KB

File metadata and controls

165 lines (118 loc) · 7.13 KB

Thought Canvas v12.6 测试报告

版本:1.2.6 执行日期:2026-07-25

1. 本次验证对象

v12.6 保留 v12.5 的分支、推理、标注、多语言、编码修复和 Codex 能力,并增加第三条主线:

  1. 设置内的简体中文、English、日本語界面切换;
  2. 历史文本乱码的识别、保守修复、备份与迁移审计;
  3. 确定性的语义列自动排布:拆解同列竖排、后代向右、完整子树纵向避让。

同时完整回归复杂 Markdown 选区、递归拆解/提炼、消息级分叉、上下文快照、推理对象、比较决策、流式停止续写、API Key 模型同步、思考等级、Codex OAuth/动态模型/命名只读权限、版本恢复、标注、折叠和三种导出。

2. 乱码诊断结论

用户截图中的 解释、里é�¢ 一类字符串,是中文 UTF-8 多字节序列被 Windows-1252/CP1252 当作单字节文本解读后形成的典型 mojibake。

当前服务已经对 HTML、JavaScript、JSON 和 NDJSON 明确发送 UTF-8,因此截图更符合以下某个历史边界曾发生误解码的表现:

  • 旧项目文件;
  • 复制或 JSON 导入工具;
  • 恢复版本;
  • 普通模型供应商或 Codex 的历史输出;
  • 旧版浏览器/API 中间层。

仅凭截图无法证明最早发生在哪个入口,因此实现没有把未经证实的单一入口写成根因,而是在可信的读写和传输边界统一增加保守修复。

修复器只在候选文本的乱码信号显著下降、且不引入替换字符时接受转换;正常中文、日文、英文、模型 ID 和常见拉丁文字保持不变。已经出现 �、丢字节或其他不可逆损坏的文本,可能仍需从迁移前备份人工恢复。

3. Gate 1:中英日界面语言

已验证行为

  • 设置 → 通用提供 简体中文 / English / 日本語;
  • 切换后立即预览,无需刷新;
  • 保存后写入非敏感本地设置,重启仍保持;
  • document.lang、日期和数字 locale 随语言变化;
  • 静态文本、动态按钮、占位符、常用弹窗、状态、ARIA 标签和模式化计数可切换;
  • 项目标题、用户输入、模型回答、标注、推理对象和比较结果不被 UI 层翻译;
  • 即使用户内容本身等于“设置”等 UI 词条,也保持原样;
  • 新生成请求附带当前界面的回答语言指令,并允许用户在提问中明确覆盖。

自动证据

npm run test:i18n
npm run test:local
npm run test:browser

结果:PASS。

浏览器套件实际在同一页面完成中文 → 英文 → 日文 → 中文切换,验证保存、重载、用户内容隔离和动态 DOM 翻译。

4. Gate 2:UTF-8 乱码修复与迁移

已验证行为

  • HTML、JavaScript、JSON、NDJSON 响应包含明确 UTF-8 charset;
  • 支持截图样本、日文样本、混合正常文本和双重误解码;
  • 正常多语言文本及模型标识不被误改;
  • 历史项目读取时深层修复标题、目标、节点、消息及嵌套字段;
  • 第一次写回修复项目之前生成 encoding-before-* 原始备份;
  • 项目持久化迁移版本、修复时间和累计修复数;
  • 当前保存、恢复版本、设置、JSON 导入、API 请求/响应、普通供应商及 Codex 输出使用同一保守边界;
  • 浏览器提前修复旧响应时,修复计数仍能传到后续项目保存;
  • UI 只显示一次非阻塞修复提示,并随界面语言切换。

自动证据

npm run test:encoding
npm run test:local
npm run test:browser

结果:PASS。

本地 HTTP 测试同时验证了迁移前备份、修复元数据、乱码恢复版本、设置重启修复和供应商输出修复;Chromium 测试验证项目标题、目标、消息恢复后不再包含原始乱码,并在下一次保存写回迁移记录。

5. Gate 3:确定性语义列布局

已验证行为

  • 同一个 decomposition:* 组共享 x,并按稳定语义顺序竖排;
  • 每个普通子节点严格位于实际父节点右侧 430px;
  • 唯一子节点中心 Y 对齐,多子节点以首尾中心围绕父节点;
  • 不同高度、嵌套拆解和不均匀深分支通过逐深度轮廓紧凑放置;
  • 主树、孤立树、merge/summary 和 annotation 以完整子树纵向避让;
  • 增量新增不移动无关稳定节点,也不通过额外右移列躲避;
  • 手动标注坐标不变;连续两次完整排布坐标完全一致。

自动证据

npm run test:layout
npm run test:browser

纯函数 fixture 检查世界坐标和布局不变量;Chromium 另用真实 DOM 矩形检查所有未归档可见节点无重叠。

6. Gate 4:完整工作流回归

分别执行:

npm run check
npm run test:selection
npm run test:encoding
npm run test:i18n
npm run test:capabilities
npm run test:core
npm run test:local
npm run test:codex
npm run test:browser

全部 PASS。

主要覆盖:

  • 跨标题、列表、引用、强调、链接、表格和代码块的选区;
  • 无法唯一映射时保存可见文字并明确标记范围未知;
  • 拆解模块继续递归拆解和提炼;
  • 独立顶部模块、搜索对齐、统一弹窗、分支编辑器和焦点行为;
  • 标注点击/拖拽、3/3 密集虚线、状态隔离、折叠和搜索自动展开;
  • 目标确认、消息截止分叉、不可变上下文、推理对象、语义关系、比较和决策;
  • API Key 验证后保存、模型同步、思考参数转发和失败密钥保护;
  • Codex 浏览器/设备码 OAuth、模型目录、思考等级、:read-only 权限、流式和中断;
  • Host、Origin、本地会话令牌、密钥隔离、Compact、版本恢复和三种导出。

完整工作树 npm test 连续两次退出码均为 0;两次 Chromium 阶段分别约 45.39 秒和 46.01 秒,随后全部 Node 套件通过。

7. Gate 5:净化交付包

发布目录和最终 ZIP 解压副本均执行:

npm run verify:package
npm test

结果:PASS。

严格扫描共检查 63 个文件,确认不包含:

  • .git;
  • .env.local;
  • 本地设置、运行状态、项目和恢复数据;
  • Python/Node 缓存;
  • 日志、截图和嵌套归档;
  • 符号链接;
  • 可识别的 API Key、Bearer Token、Cookie 或 Client Secret 模式。

ZIP 另外通过 unzip -t 完整性检查。净化解压副本完整 npm test 再次通过,Chromium 阶段约 45.91 秒。最终 ZIP 的 SHA-256 记录在 LAYOUT_FIX_REPORT.md 和交付消息中。

8. 测试边界

  • Chromium 套件使用真实 HTML/CSS/JavaScript;受执行环境限制,浏览器网络层使用同构页面内 API。真实 Node HTTP、文件系统、会话令牌和密钥隔离由独立本地集成测试覆盖;
  • Codex 自动化使用严格的 App Server JSONL 替身,不等同于真实账号、套餐、组织策略、网络或模型灰度;
  • 普通模型供应商使用带认证的本地假上游,没有使用用户真实 API Key;
  • 乱码类型可由字符串特征判断,但最初入口仍需原始损坏文件或上游原始日志才能精确归因;
  • 不可逆丢字、替换字符或非 Windows-1252 的复杂损坏无法保证自动恢复;迁移前备份用于人工取证和恢复。