STORY STUDIO 教程中心
打开编辑器 ↗

0.4 浏览器本地存储迁移验证(2026-09-28)#

本次更改服务器为静态文件主机,将目录读写、素材 GUID 与去重、跨章校验、ZIP 导出迁入浏览器。原章节仓库未改动;内置浏览器中导入了第一章和回忆录的独立浏览器副本。

自动化#

  • Node:core-v2、features-v3、local-storage,共 18 项;覆盖动作成功/失败/重试、广告、一次奖励、跨章记忆与返回,及本次存储迁移。
  • Python:16 项,覆盖既有目录/CLI 协议、静态发行包、内置教程链接。
  • 还原客户端 parser、动作/回忆和小写 stories 封面协议检查通过。
  • 分块 SHA256 对照 Node 标准实现,包含分块边界与多 MiB 数据。
  • ZIP 用独立 Python zipfile 校验 CRC、中文路径与内容;流式输出与 Blob 输出一致。
  • 存储覆盖同章去重、跨章隔离、替换/移动后 GUID 不变、fork、副本版本冲突、写入配额失败、每个标签页独立草稿。
  • 模拟 File System Access 验证目录外部变更保护、未完成写入 journal、配额失败时不写文件。原生目录授权对话框未通过内置浏览器自动化操作;实际使用由用户在支持的浏览器授权。
  • 发行包隔离运行:静态页面和教程可访问;工程 API 为 404,POST 为 405,无 Set-Cookie;请求前后文件哈希一致,无章节、上传、导出和会话数据产生。
sh
node --test tests/core-v2.test.js tests/features-v3.test.js tests/local-storage.test.js
python -m unittest discover -s tests -p 'test_*.py'
node --loader ./tests/cc-loader.mjs tests/client-contract.mjs
node --loader ./tests/cover-loader.mjs tests/cover-contract.mjs

local-storage 最后一项用相邻 story-chapters 中既有教程章节做只读兼容检查;该项是本工作区集成测试,不随独立静态发行包分发。

内置浏览器验收#

  • 从实际章节目录分别导入 chapter-001-restore-test 与 memory-album,媒体均来自本地文件;原件不回写。
  • 修改节点名称并保存,刷新后修改保留;随后恢复原名。
  • 回忆录的视频元数据与图像按钮正确,试走显示未解锁卡片;新工作空间预览存档与旧版本存档隔离。
  • 在第二个标签页保留旧版本,第一标签页保存新版本后,旧页保存被拒绝并显示保留草稿提示,未覆盖新版本。
  • 回忆录客户端包成功生成 9.3 MB、7 个素材,包含主线依赖;控制台未出现错误。
  • 新章节库入口截图检查,保留默认深色与三列布局。

ZIP32 总包小于 4 GiB;普通 Blob 下载限制 512 MiB,大包使用支持浏览器的直接保存 ZIP。更改域名 / 端口或清理站点数据不会迁移浏览器副本。具体部署、备份与恢复见 部署文档。

---

以下为 0.3 系列历史验证记录,描述的是当时服务端架构,0.4 以本文上半部分与部署文档为准。

0.3 功能补齐验证(2026-09-27)#

自动验证#

  • 14 项 Python 测试:原有目录存储与独立发行包 HTTP 验证,加上跨章依赖打包、共享变量冲突、缺失跳转点、复制章节同 GUID 的媒体隔离。
  • 8 项 Node 测试:原有定时/变量/素材检查,以及动作成功与超时失败、重试重置、广告完成前不授奖、一次领取与存档恢复、回忆解锁和跨章返回、异步跳转取消、广告回忆不直接解锁。
  • 实际还原客户端模块契约验证:生成节点经 parseStoryJson 读取;原生 choiceTiming、videoSuccessorRouting、applyVariableEffects、evalConditions、jumpResolve、returnVideoChain 函数分别核对动作窗口、失败路由、奖励规则、同章/跨章回放和返回。仅模拟平台 IO/存储与 Cocos 注册接口,不替换被验证的协议逻辑。

内置浏览器验收#

独立工作空间 workspace/v3-acceptance,使用第一集真实视频和图片;不写入用户章节仓库。

  • 新动作表单修改并自动保存,重复配置保留节点 ID。
  • 未点击动作,视频自然结束进入失败;失败片尾重试,点击动作进入成功。
  • 领取奖励弹出广告模拟,取消不发放;重试观看完成后回忆变量为 1、数值奖励为 5。
  • 回忆录未解锁卡片禁用;领取后可跨章回放,返回按钮回到来源回忆录。
  • 刷新后解锁状态保留;章节封面表单与多章运行包导出可用。
  • 浏览器未发现 JavaScript 错误。

重跑#

powershell
python story-editor/tools/build.py
python -m unittest discover -s story-editor/tests -p 'test_*.py'
node --test story-editor/tests/core-v2.test.js story-editor/tests/features-v3.test.js
node --loader ./story-editor/tests/cc-loader.mjs story-editor/tests/client-contract.mjs

发行包不含测试、素材、工作空间、用户存档或还原客户端,需 Python 3.10+。契约测试需工作区中的 recovery 模块;其他自动测试使用临时目录或内存夹具。

范围#

没有执行公网部署或真实广告调用。动作未操作在视频结束时进入失败;需要即时失败时裁切动作视频。回放返回遵循原生上一视频链,多段回放的返回需要逐段返回。章节锁定与广告自动解锁字段由客户端选章页解释,编辑器直接试走章节。连点、特效、随机等其他原版高级行为仍须客户端验证。多人编辑依靠 Git 与 revision 冲突检测,不包含实时协同。

历史 0.2 验证记录见本次修改前的备份。

0.3.1 封面兼容修复#

检查实际 chapterMediaCandidates:即使配置了自定义封面,客户端仍加入并优先探测 Stories/ChapterImages/ChapterThumbnails 下的候选。运行导出现在将封面放在该规范路径,章内其他引用同步指向同一文件。增加断言覆盖跨章同 GUID 隔离、封面与节点路径一致、媒体字节不变、无媒体导出及编辑工程 GUID 不变。

0.3.2 路径大小写#

服务器已有目录为小写 stories。导出与测试断言统一使用小写;追加实际客户端封面候选测试,复现旧 GUID 路径先探测大写 Stories,确认显式小写规范路径优先命中且候选中不包含大写 Stories。

powershell
node --loader ./story-editor/tests/cover-loader.mjs story-editor/tests/cover-contract.mjs
教程可随编辑器离线查阅 · 具体功能以当前安装版本为准 回到顶部 ↑