news 2026/9/16 17:47:15

Instatic 用户 E2E 功能矩阵深度解析:从 Agent 浏览器审计到 Playwright 回归套件

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Instatic 用户 E2E 功能矩阵深度解析:从 Agent 浏览器审计到 Playwright 回归套件

Instatic 用户 E2E 功能矩阵深度解析:从 Agent 浏览器审计到 Playwright 回归套件

【免费下载链接】InstaticThe open-source alternative to Webflow, Framer and WordPress. Agentic self-hosted visual CMS outputting clean static pages. Users, roles, plugins, content, database, it's all there.项目地址: https://gitcode.com/GitHub_Trending/in/Instatic

导读

本文围绕 Instatic 开源仓库(Webflow/Framer/WordPress 的自托管开源替代品,可视化 CMS 输出纯净静态页面)中的 docs/e2e/feature-matrix.md 展开,系统梳理其用户级 E2E 功能矩阵的完整结构:优先级分级、自动化覆盖标记、十五大产品域的场景行、每条场景行的验证要点,以及矩阵与tests/e2e/Playwright 套件、src/__tests__/Bun 单元测试之间的映射关系。读完本文,你将掌握如何使用这张矩阵选择 Agent 浏览器审计范围、如何理解矩阵中的场景行设计哲学,以及如何把矩阵行沉淀为可重复运行的回归测试。

一、矩阵定位:用它来选择 Agent 浏览器审计范围

功能矩阵开篇即明确其核心用途:用它来选择 Agent 浏览器审计范围("Use this matrix to choose agent-browser audit scope")。矩阵中的每一行都是一条"用户目标"(User Goal),要求步骤具体到可以执行,但刻意避免实现细节——这正是它与传统"测试用例清单"的本质区别:行描述的是用户在做什么,而不是代码在做什么

矩阵与配套文档构成一个完整的质量闭环体系(docs/e2e/README.md):

文档作用
protocol.md定义 Agent 如何执行用户级 E2E 审计的完整流程
feature-matrix.md按产品域列出场景行(本文主体)
capabilities.md展开能力/访问控制类 E2E 场景(CAP-001 至 CAP-005)
feature-validation.tsv规范的功能/测试/缺陷电子表格,用于质量循环运行
run-log-template.md每次审计后写入runs/的运行日志模板
spotlight.md⌘K 命令面板(Spotlight)的专项测试计划

README 提供了可直接复用的 Agent 提示词模板,例如"Run the Core Owner Lifecycle E2E protocol""Run rows MEDIA-001 through MEDIA-003""Promote PUB-001 into automated smoke coverage",说明这张矩阵既是审计范围选择器,也是测试能力晋升(promotion)的候选清单。

二、两把钥匙:优先级键与自动化键

矩阵使用两套行内标记系统,让任何人在几十个场景行中快速定位关键路径:

优先级键(Priority Key)

Priority含义
P0任何可用发布前必须可用(Must work before any usable release)
P1核心 CMS/编辑器工作流
P2重要的产品工作流
P3打磨、边界情况或后续加固

从矩阵实例可见优先级分布规律:P0 集中在"首次设置与所有者生命周期"(SETUP-001 至 PUB-003)与"能力与访问控制"(CAP-001 至 CAP-003)两大域;P1 遍布编辑器、页面管理、可视化构建、内容 CMS 等核心域;P2/P3 多为账户安全细节、性能可靠性、可访问性打磨。

自动化键(Automation Key)

Auto含义
tests/e2e/中有完整的 Playwright 回归覆盖
partialPlaywright 覆盖该行的一部分,其余由 Agent 运行处理
仅由 Agent 运行(agent-run only)

值得强调的是:矩阵中约一半行是partial,这并非测试缺失,而是刻意设计。README 的"Intentionally left agent-run only"章节给出了保留 Agent 运行的理由:主观判断、拖拽/缩放物理依赖、环境依赖,或需要产品/角色工具链而使持久断言变得脆弱(如 "Does this label feel clear?" 这类问题无法用断言表达)。这正是"用户级 E2E"理念的体现——浏览器证据优先(Browser evidence comes first),Agent 用 UI 作为事实来源,代码、数据库、API 检查仅用于重置、解阻塞或事后分诊。

三、Core Owner Lifecycle:旗舰所有者旅程

矩阵将"Core Owner Lifecycle"列在首位,因为它覆盖了产品的最小闭环:从首次设置到匿名访客验证发布内容

场景行速览

ID优先级Auto用户目标核心验证点
SETUP-001P0创建第一个站点和所有者账号打开/admin完成设置,进入 admin/editor
AUTH-001P0登出再登录会话结束、登录恢复访问
AUTH-003P0登出并使陈旧标签页失效当前标签页回登录页,陈旧标签页无法继续浏览
EDIT-001P0向首页添加可见文本文本出现在画布且刷新后保留
EDIT-002P1添加按钮并修改标签/链接按钮按预期标签和链接渲染
SAVE-001P0编辑后刷新草稿内容保持可编辑
PUB-001P0发布首页出现成功反馈
PUB-002P0以访客身份访问已发布首页公共页面无 admin chrome
PUB-003P1未发布草稿变更保持私有公共页面仍显示最后发布版本
PUBLISH-002P1调度未来发布仪表盘显示调度计数与 Publish lineup,调度器按时发布

旗舰回归测试的源码证据

矩阵后的注记详细描述了core-owner-lifecycle.e2e.ts的完整执行序列。查看 tests/e2e/core-owner-lifecycle.e2e.ts 可以印证其实现:

  • 测试以ANONYMOUS_STATE运行(不用共享的 ownerstorageState),因为它包含登出步骤——登出会使服务端会话 token 失效,如果污染共享状态会破坏后续所有 spec。这是 README 中"Session rule"的典型体现;
  • 通过login/logout/openSiteEditor辅助函数完成 AUTH-001;
  • 通过insertNotchModule(page, 'text')setPropValue(page, 'text', ...)插入文本(EDIT-001);
  • 使用page.reload()+expectEditorReady+canvasFrame断言验证草稿持久化(SAVE-001);
  • 通过publishDraft(包含 step-up 流程)发布(PUB-001、CAP-003),再用visitPublicPage(browser, { visibleText, hiddenText })以全新匿名上下文验证访客视图(PUB-002、PUB-003)——其中hiddenText参数专门用于断言"草稿文本不得泄漏到公共页面"。

PUBLISH-002 的调度发布由两部分验证:page-management.e2e.ts在 Site 工具栏调度页面并验证仪表盘 Pages widget 与 Publish lineup;src/tests/server/publishScheduler.test.ts 则覆盖调度器 tick 将到期页面行以系统 actor 身份提升为已发布。

手机端(390px)覆盖

SAVE-001 的注记还展示了移动端策略:page-management.e2e.ts保存隔离页面、切换 390x844 视口、刷新、重开页面、验证文本,并断言窄工具栏不产生文档级水平溢出——移动端不是事后修补,而是矩阵行的正式组成部分。

四、Admin Shell 与账户安全:step-up 与 MFA 的纵深验证

这一域(ADMIN-001 至 USERS-003、ACCOUNT-001 至 AUTH-006)是矩阵中注记最密集的区域之一,核心主题可归纳为三层:

1. 导航与外壳可靠性

  • ADMIN-001/003admin-navigation.e2e.ts验证工作区导航、全局工具栏 trailer、账户菜单、Open Live root 回退、Content 选中项深链到/posts/<slug>、离开 Content 后清除 entry target,以及 390px 工具栏 trailer 包含性。
  • ADMIN-004:从 Dashboard 非编辑器路由打开 Settings,验证 General/Shortcuts/Publishing/Preferences 分区,通过真实控件写入 Confirm before deleting layers、Theme、UI density、UI text size,验证刷新持久化、损坏 localStorage 回退与 390px 包含性。矩阵还记录了实际缺陷DEF-20260623-ADMIN004-01(Preferences 控件超出 390px 视口),修复方式是SettingsModal.module.css在手机宽度切换为单列移动外壳。
  • ADMIN-005:聚焦 Bun 覆盖工作区布局存储回退、ToastProvider 行为、ConfirmDeleteProvider alertdialog 提交门控、no-native-dialog 架构强制、错误边界布局。记录了三个实际修复:Toast barrel 导出dismissToast(DEF-20260623-ADMIN005-01)、内容左面板移动端溢出(-02)、内容右侧设置面板移动端溢出(-03)。

2. 账户安全(step-up 门控)

矩阵反复出现"step-up"概念:敏感操作要求新鲜的密码/MFA 确认。ACCOUNT-003/004/005 与 CAP-003 的注记共同勾勒出完整策略:

  • ACCOUNT-003(改密码):验证过短密码与不匹配确认的字段级提示、step-up 门控的密码轮换、旧密码拒绝、新密码登录;accountSecurity.test.ts覆盖多会话吊销等 API 边界。
  • ACCOUNT-004(MFA 生命周期):启用/禁用 TOTP、恢复码生成/燃烧/复用拒绝、QR 渲染失败回退到手动设置密钥(src/tests/admin/accountPage.test.tsx)、移动端设置对话框包含性。
  • ACCOUNT-005(step-up 窗口策略):窗口可选值 5/15/30/60 分钟,disabled 模式绕过普通敏感门控但不绕过策略编辑器本身(accountSecurity.test.ts),过期窗口拒绝敏感操作(authStepUp.test.ts)。

3. 会话与活动审计

  • AUTH-003auth.e2e.ts通过将活动会话克隆到第二个浏览器上下文、在第一个上下文中登出、验证陈旧上下文被强制回到登录页,自动化了陈旧标签页会话吊销;authSessionEdgeCases.test.ts覆盖重复POST /logout的安全 cookie 清除。
  • AUTH-006account.e2e.ts使用一次性账户验证 5 次错误密码触发锁定、额外一次触发元组限流、活动页展示可疑活动横幅与失败计数徽章。
  • USERS-001/002/003:非所有者用户全生命周期(创建/编辑/挂起/重置/删除)、自定义角色生命周期(roleManagementEdges.test.ts覆盖重复 slug、零能力角色、内置角色保护、使用中角色删除保护)、审计日志渲染(auditLogEdges.test.ts覆盖audit.read权限强制、newest-100 排序、软删除用户标签)。

五、Dashboard 与 Onboarding

DASH-001 至 DASH-003 全部在 tests/e2e/dashboard.e2e.ts 中自动化:

  • DASH-001:验证默认所有者仪表盘路由、Overview 控件、Today/7d 范围 tab 状态、Customize/Add block 控件、全部九个默认第一方 widget(storage、pages、posts、media、status、activity、publish lineup、plugins、domain)、动态 widget 的加载态、SQLite 存储标签、390px 移动端包含性。记录缺陷 DEF-20260623-DASH001-01(Overview 头部移动端溢出,760px 以下堆叠包裹修复)。
  • DASH-002:自定义模式、Block library、添加内置 AI usage widget、服务端dashboard-layout偏好持久化、刷新恢复、网格拖拽移动、右缘 resize、拖到 library 删除、最终刷新消失。记录缺陷 DEF-20260623-DASH002-01(Block library 实时预览中的非法嵌套按钮)。
  • DASH-003:在专用 post-setup、pre-persona 项目中运行,验证 1/5 进度(仅身份完成)、五个任务标签/状态/动作、Settings modal 动作、工作区路由(New page/Browse plugins/Add members)、服务端 dismiss 持久化。

值得注意的工程细节:DASH-003 必须在dashboard-preflight项目中运行(紧随 setup、先于任何 persona/插件/内容变更),以保证干净安装的 onboarding 事实确定性——这对应 playwright.config.ts 中四个 project(setupdashboard-preflightpersonase2e)的依赖链设计。

六、能力与访问控制(CAP 域)

矩阵中 CAP-001 至 CAP-005 为 P0/P1 行,完整场景描述在 docs/e2e/capabilities.md 中展开。核心设计是每个场景创建专用角色与用户,登出或使用独立浏览器上下文以防缓存 admin 状态泄漏:

  • CAP-001(工作区隔离)users.e2e.ts创建 Site+Media 角色,验证工具栏只暴露 Media、隐藏 Content 与 Users、直接访问/admin/users被重定向走且不渲染受保护工作区,同时覆盖 390px 有限用户工具栏。
  • CAP-002(编辑模式边界)capabilities.e2e.ts创建 content-only / style-only / structure-only 三种站点编辑角色,验证每个人只能完成其被允许的编辑类别,且类别外的控件保持不可用而不是点击后才失败。相关修复(DEF-20260622-001/002)印证了服务端 page-row diff 校验与属性控件渲染的类别隔离。
  • CAP-003(敏感操作 step-up):每个发布 spec 都会演练发布 step-up;users.e2e.ts覆盖用户创建取消/错误/正确密码、过期窗口重新提示、390px 移动对话框;account.e2e.ts覆盖 MFA 启用用户的创建 step-up;capabilities.e2e.ts覆盖插件 JSON manifest 安装/卸载与破坏性 CMS-bundle 替换导入 step-up;src/tests/server/stepUpSecondaryActions.test.ts 覆盖用户删除、角色删除、step-up 策略与单会话吊销门控。
  • CAP-004(数据/媒体操作拆分):验证 data 读/管/导入/导出、内容行移动门控、媒体读/写/替换/删除各自的 affordance 保持独立——替换不隐含上传/写入,删除不隐含上传/替换。
  • CAP-005(插件/AI 拆分):插件读/安装/配置/生命周期/调度/包与 AI chat/供应商管理/审计标签页拆分;AI 写工具过滤由单元门控 src/tests/agent/aiToolCapabilityGate.test.ts 覆盖而非浏览器 spec——因为凭据按用户隔离,且 chat-only persona 在浏览器中无法构建可工作的本地供应商。

七、页面管理与可视化构建(PAGE/BUILDER/SITE 域)

页面管理

PAGE-001 至 PAGE-004 在page-management.e2e.ts中自动化:从 Site Explorer 创建一次性页面、验证新页面出现在画布、通过右键菜单重命名、通过确认对话框删除、以及关键的 PAGE-004——未保存编辑后切换页面再返回,证明草稿状态保留。

可视化构建器

visual-builder.e2e.ts是矩阵中覆盖最广的 spec 之一,从注记可见其能力全景:

  • BUILDER-001/002/003/005/007:模块插入、节点选择与属性编辑、DOM 面板拖拽重排、撤销/重做(含 redo 分支清除与刷新重置)、断点作用域样式。
  • SITE-005(模块选择器):桌面端 Grid 视图搜索button、Enter 插入、Recent 记录、List 视图偏好持久化;拖拽回归验证 Text 拖入 Container 内部的放置预览;390px 移动端对话框包含性。配套的 module-inserter 低层套件覆盖损坏 localStorage 回退、Recent 去重、服务端收藏、禁用/隐藏模块可用性。
  • SITE-017(可视化组件与插槽):将 Text 组件化、添加 Slot Outlet、回到页面向锁定的生成插槽插入 Text、保存/发布、匿名访客看到组件主体与插槽填充且无编辑器标签。注记记录了实际缺陷 DEF-20260623-SITE017-001(页面/组件增量保存顺序,修复为先写组件行再写页面行)。
  • SITE-018(模板与动态绑定):先发布一次性 post、创建更高优先级 Posts 模板、通过 Preview source 显式选择真实行、用绑定选择器插入{currentEntry.title}与内容 outlet、验证画布预览、保存并发布模板、匿名/posts/<slug>路由渲染自定义模板且无未解析 token。
  • SITE-019(保存布局):保存带样式的 Container 子树为布局、空白/重名验证、390px 布局分类可达性、插入到另一页面保留捕获的 class 样式、从管理菜单重命名/删除、保存/刷新/发布并验证匿名公共输出。记录三个实际缺陷(addPage 陈旧节点选择、count-only 移动分类按钮、保存布局管理菜单 z-index)。

八、站点运行时与代码(SITE-013/014/016)

  • SITE-013(代码编辑器):TypeScript 站点脚本的 DOM 感知补全、悬停签名、严格语义诊断(有界可折叠 Problems 列表)、相对文件类型、自动保存、画布执行、发布编译。聚焦 Bun 覆盖 worker 协议/客户端、懒加载编译器隔离、worker bundle 预算;2026-08-11 的 agent-browser 运行覆盖实时类型错误渲染等。
  • SITE-014(运行时依赖):缺失导入可见、安全依赖解析为 lock/importmap、缓存包文件在/_instatic/runtime/cache下服务。tests/e2e/runtime-dependencies.e2e.ts 覆盖浏览器端脚本 import 编写、Dependencies 面板缺失包 Add、实时canvas-confettiregistry/cache 解析、保存/发布、公共 importmap 发射、浏览器加载/_instatic/runtime/cache/...包 URL,以及 390px 移动端路径。注记记录了三个修复(Code Editor 悬浮拦截 Add、相对 RUNTIME_CACHE_DIR 泄漏导致 esbuild 解析失败、移动端 Code Editor 被固定桌面面板尺寸阻塞)。
  • SITE-016(预览与实时对比):tests/e2e/preview-live.e2e.ts 发布版本 A、保存未发布草稿 B、验证 Preview 页面 iframe 渲染 B、验证 Open live page 弹窗仍服务已发布 A 且无编辑器 chrome、390px 重复打开验证无溢出。Issue #234 额外将 Preview 页面门控到服务端 runtime-preview 路径,使 loop 与媒体预取与公共渲染一致。

九、公共服务与动态片段(PUBLIC-003/004)

  • PUBLIC-003(资产):内容哈希 CSS/运行时资产与包缓存文件以正确内容类型服务、不可变缓存、独占命名空间、公共媒体重定向行为。聚焦 Bun 覆盖外部 CSS link 生成与陈旧/畸形 CSS 404、DB 与磁盘双后端运行时资产服务、module-JS bundle 注入与路由校验、签名媒体重定向架构。tests/e2e/forms.e2e.ts 记录浏览器加载的/_instatic/css/*.css/_instatic/module-js/base.form.js的 200 状态与内容类型;tests/e2e/media.e2e.ts 记录/uploads/PNG 解码。
  • PUBLIC-004(动态片段):静态外壳包含<instatic-hole>占位与 hole runtime,片段按当前发布版本与来源路由查询渲染。tests/e2e/public-dynamic-fragments.e2e.ts 编写路由查询文本 hole、发布、验证烘焙外壳、观察/_instatic/hole-runtime.js/_instatic/hole/*响应、桌面与 390px 移动访客水合不同的route.query值。

十、基础模块(MODULE-001 至 005)

这五行大多为partial:模块渲染契约由聚焦 Bun 测试覆盖,浏览器插入/编辑/发布排列保持 agent-run。矩阵注记给出的测试映射具有高度参考价值:

聚焦测试覆盖内容
MODULE-001src/tests/base-modules.test.ts、src/modules/base/outlet/tests/outlet.render.test.tsbody 直通渲染、container 语义标签/属性/void 标签、outlet 内容区域回退
MODULE-002base-modules.test.ts、sanitizeSvg、svgMappingtext/list/link/button/image/video 渲染契约、base.svg一致性、SVG 净化、可访问标签转义
MODULE-003base-modules.test.ts、src/tests/publisher/loopRender.test.ts、src/tests/server/loopPrefetch.test.ts、src/tests/server/dynamicDetection.test.tsloop 默认值/标签回退、currentEntry/parentEntry 隔离、空/缺失数据、无限模式运行时注入、预取与请求依赖检测
MODULE-004src/tests/forms/formModules.test.ts 及 forms/canvas/publisher/server/publicForms/panels 下多套件表单模块契约、语义渲染、发布边界转义、formId 规范化、canvas 原生提交抑制、运行时发射、公共端点安全
MODULE-005base-modules.test.ts、moduleConsolidation、visualComponentRef、publishWithComponents 及 core/editor-store/persistence/integration/canvas/dom-panel/architecture 多套件component-ref/slot-outlet/slot-instance 契约、发布内联、prop 覆盖、缺失组件、嵌套引用、插槽同步、递归门控、锁定插槽实例

十一、表单(FORM-001/002)

CMS 原生表单的可视化编排与公共提交安全:

  • FORM-001:表单模块语义渲染、字段快照、设置分析、兼容字段绑定、canvas 原生控件抑制(含提交按钮)、表单预览父级查找。tests/e2e/forms.e2e.ts 覆盖浏览器端创建目标数据表、表单编排、保存、发布、公共提交、admin 数据行验证。
  • FORM-002:全路由所有权、同源/页面 token challenge 签发、一次性 challenge 提交、超大 payload 处理、限流、目标表守卫、字段验证、运行时 challenge 预取/提交委托、page-token 盖章。浏览器 spec 覆盖成功反馈、持久化数据行创建、移动端过速错误反馈、真实时钟最小提交重试、移动端公共页面溢出检查。

十二、媒体(MEDIA-001 至 007)

media.e2e.ts的覆盖在矩阵中标注为全部 ✅ 或 partial:

  • MEDIA-001/002/003:上传图片并放置、不支持文件上传的清晰校验反馈、复用已上传资产。
  • MEDIA-004:标题/文件名/alt/说明/标签的元数据编辑持久化,外加 390px 移动 viewer 包含性。
  • MEDIA-005:替换/软删除/恢复/彻底清除的生命周期,外加移动端替换对话框与 Trash 导航。
  • MEDIA-006:干净安装的内置存储面板——本地磁盘支撑每个角色、本地 sharp delegate 被选中、空适配器/委托状态清晰、无外部适配器或积压时不出现迁移/测试动作。
  • MEDIA-007:上传 SVG 的不安全向量净化(存储与服务前剥离)与公共/uploads服务;光栅变体阶梯/srcset、缺失变体回退、外部签名 URL 过期保持低层或未来覆盖。

十三、Content CMS 与 AI 工作区

Content CMS(CONTENT-001 至 010)

content.e2e.ts与专项 spec 覆盖了丰富的内容场景,其中几个注记展示了"矩阵发现缺陷→修复→回归"的闭环:

  • CONTENT-003:斜杠菜单 Heading 2 与 Data token 占位插入的保存/刷新持久化。
  • CONTENT-005:明确编排并发布低优先级 Posts title/outlet 模板,在 Live 模式验证未保存草稿 title/body 渲染。
  • CONTENT-008:向系统 Posts 表添加自定义文本字段(Data inspector)、在 Content 设置侧栏编辑、保存/刷新、发布 post、从 Site builder 绑定选择器插入自定义字段、验证画布预览解析、发布模板、匿名/posts/<slug>渲染自定义值。
  • CONTENT-009content-create-race.e2e.ts保持首个 entries-list GET 直到 create POST 落地,强制触发之前将编辑器空白标题视图合并进侧栏的排序问题;验证修复前失败、修复后通过,contentAdmin.test.tsx在单元层锁定同一路径。
  • CONTENT-010content-seo-meta.e2e.ts编写 SEO title/description 与条目标题不同,发布后读取匿名公共路由的服务 HTML;验证修复前<title>显示普通条目标题且无 description 标签。条目级与站点级设置优先级及{page.title}绑定守卫在publicRendering.test.ts渲染层锁定。

AI 工作区(AI-001 至 007、AI-010)

ai.e2e.ts使用 fixture-backed 本地 Ollama 兼容服务器完成浏览器覆盖:

  • AI-001:Ollama base-URL 凭据创建/列表/删除、离线时跳过自动默认化。
  • AI-002:Data 作用域默认凭据/模型选择、保存反馈、刷新持久化、清除反馈、清除后可删除凭据(用离线 Ollama 凭据与确定性回退模型列表)。
  • AI-004:站点助手对 fixture-backed 本地供应商的流式回复,以及文本用途审计持久化。
  • AI-005:浏览器执行的site_read_document工具结果桥——工具请求、浏览器结果 POST、供应商第二轮、完成工具徽章、最终助手文本。
  • AI-006:Audit 标签页按模型/表面/提示与完成 token/日支出验证流式聊天的用量汇总。
  • AI-007:直接供应商驱动映射(Anthropic/OpenAI/Ollama/OpenRouter)在 src/tests/ai/*Mapping.test.ts 与 pricing 测试中覆盖,OpenRouter 路径验证 Responses 端点、bearer auth、原生usage.cost透传、模型列表定价与上下文窗口。
  • AI-010:工作区 MCP 桥在真实浏览器中保持流可读——/admin/api/ai/editor-bridgetext/event-stream响应 200、no-transform 缓存、客户端保持流打开无解析错误。

十四、响应式、可访问性、性能与可靠性(A11Y/RESP/PERF/REL)

  • A11Y-001accessibility.e2e.ts键盘纯登录——setup 后使用匿名存储、聚焦 Email、Tab 到 Password、Enter 提交、验证认证 admin shell 出现。
  • A11Y-002 / RESP-001:主 admin shell 键盘导航;768x1024 平板宽度验证工具栏、canvas 根与账户菜单触发器可见可达。
  • RESP-002:390px 视口公共页面可读且有样式(发布页面移动冒烟)。
  • PERF-001/002performance.e2e.ts冷启动打开/admin/site在宽松的 20s 预算内就绪编辑器 chrome、loader 消失、无 console 错误;含文本/链接按钮/上传图片的页面在 30s 预算内完成发布并检查公共路由。
  • REL-001reliability.e2e.ts已保存编辑刷新恢复。
  • REL-002error-handling.e2e.ts页面 slug 必填/保留验证与恢复。

十五、配置部署与安全边界(CONFIG/SECURITY)

  • CONFIG-001(数据库方言):src/tests/db/createDbClient.test.ts 覆盖 DATABASE_URL 的 SQLite 形式、Postgres scheme、非法 scheme、SQLite 父目录创建、迁移幂等;migration-paritydb-json-column-namingdb-postgres-isms等测试覆盖方言契约、JSON 列后缀漂移与 advisory-lock 差异。
  • CONFIG-002(运行时配置):src/tests/server/serverConfig.test.ts 覆盖 PORT、DATABASE_URL、UPLOADS_DIR、STATIC_DIR、可信代理与公共来源的默认值与环境变量覆盖;Docker 镜像/compose healthcheck、持久卷、生产环境变量接线由 dockerConfig 测试覆盖。
  • CONFIG-003(运行时选项强制):manifest 权限、网络主机、密钥、媒体表面与运行时依赖被验证和强制——覆盖表单密钥优先级/回退、SSRF 门控 fetch、加密插件设置、媒体适配器边界验证、运行时依赖缓存/包服务。
  • SECURITY-001(API 安全边界):这是矩阵中范围最大的 P0 行——CMS/AI API 变更由 origin、capability 与 TypeBox 请求边界检查保护。聚焦 Bun 覆盖跨 76 个 CMS 变更端点与 11 个 AI 变更端点的路由形状模糊测试(带抛错 DB)、伪造 origin 在 DB 访问前拒绝、配置的自定义与平台公共来源到达 CMS/AI 认证边界、来自可信代理的 forwarded-host/proto 欺骗拒绝、安全 CMS 读不经过 Origin 门控、CMS namespace 405、capability-before-body 排序、畸形 JSON/schema body 拒绝、路由表语义、AI 驱动隔离与 AI 工具能力过滤。

十六、矩阵的工程方法论:从审计到自动化的晋升路径

综合全矩阵,可以提炼出 Instatic 用户 E2E 体系的方法论闭环:

  1. 以用户目标为行:每个场景行描述"用户想完成什么",而非组件名、store action 或内部 ID。这让矩阵对产品人员、QA 与 Agent 同样可读。
  2. 优先级驱动:P0 行必须在任何可用发布前通过;P1 行保护核心 CMS/编辑器工作流。矩阵是发布门禁的事实来源。
  3. 双层测试体系:Playwright(*.e2e.ts,用户行为形状、可持久断言)+ 聚焦 Bun 测试(服务端边界、能力门控、校验语义)+ Agent 运行(主观摩擦、视觉、可访问性)。三者互补而非替代。
  4. 晋升条件明确:protocol.md 规定只有满足"稳定且关键、预期结果无歧义、价值是回归检测而非产品判断、可使用持久用户可见选择器"时才晋升到自动化;"这个标签是否清晰?""探索性布局审查"则明确是不良候选。
  5. 证据标准严格:run-log 需要截图路径、当前 URL、视口大小、精确可见文案、干净状态复现步骤;"数据库行不足以通过用户级场景"。
  6. 移动端是正式维度:390px 视口包含性、无文档级水平溢出、发布/账户操作可达性贯穿所有产品域,而非单独的一次性检查。

对于希望为自托管 CMS 建立用户级质量体系的团队,这张矩阵本身就是一个可复制的模板:它把"用户旅程"这一抽象概念分解为可执行的场景行,把每个场景行映射到明确的验证责任(Playwright/Bun/Agent),并用优先级与自动化标记让任何人在任意时刻都能回答"这条关键路径当前由谁在守护"。

如需从零运行这套 E2E 体系,可参考 docs/e2e/README.md 的指引:先执行bun run test:e2e:install安装 Chromium,再执行bun run test:e2e运行 Playwright 回归套件;playwright.config.ts 默认启动一次性本地栈(Admin UI 在http://127.0.0.1:5174,CMS/公共站点在http://127.0.0.1:3002,数据库为.tmp/e2e-agent.db,上传目录为.tmp/e2e-uploads)。若需调试可设置E2E_REUSE_SERVER=1复用自启服务器,或E2E_TRACE=1/E2E_VIDEO=1按需开启本地 trace 与视频捕获(完整套件因单 worker 中大量 SSE 连接可能累积数 GB 临时产物,故本地默认关闭)。

【免费下载链接】InstaticThe open-source alternative to Webflow, Framer and WordPress. Agentic self-hosted visual CMS outputting clean static pages. Users, roles, plugins, content, database, it's all there.项目地址: https://gitcode.com/GitHub_Trending/in/Instatic

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 17:46:19

oracle数据库操作系统认证的原理

Oracle 信任操作系统来验证用户身份&#xff0c;然后根据用户所属的操作系统组&#xff0c;自动授予其对应的数据库角色。 这个关联是在 Oracle 软件安装阶段 就确定下来的&#xff0c;具体过程如下&#xff1a; 编译时的硬编码映射 在 Oracle 软件安装的最后阶段&#xff0c;会…

作者头像 李华
网站建设 2026/9/16 17:44:44

储能与多微网协同优化的Matlab实现与工程实践

1. 项目背景与核心价值冷热电多微网系统是当前区域能源互联网建设的重要形态&#xff0c;它通过电、热、冷多种能源的协同转换与梯级利用&#xff0c;显著提升综合能效。而储能电站作为灵活性调节资源&#xff0c;能够有效平抑可再生能源波动、实现负荷移峰填谷。将两者结合进行…

作者头像 李华
网站建设 2026/9/16 17:43:43

Qt绘画板开发实战:QPainter绘图、事件处理与性能优化

简介&#xff1a;一份面向计算机相关专业学生与Qt初学者的简单绘画板程序源码包&#xff0c;适用于C课程设计、毕业设计或项目初期演示。程序基于Qt框架实现&#xff0c;核心功能包括绘制点、直线、椭圆、矩形等基本几何图形&#xff0c;支持绘图文件的存储与读取、撤回与重做、…

作者头像 李华
网站建设 2026/9/16 17:43:13

用Pygame完善愤怒的小鸟:物理碰撞与关卡设计实战

简介&#xff1a;这款《完善制作的愤怒的小鸟Python小游戏》是针对Python初学者与游戏开发爱好者的一款完整实战项目。项目复刻经典《愤怒的小鸟》玩法&#xff0c;涵盖Tkinter图形界面、Canvas画布绘制、物理抛射轨迹模拟、Pillow图像处理、事件驱动交互等核心知识点&#xff…

作者头像 李华