upgrade: adopt V8.31.1 (theme 1.3/1.4 redesigns, editor deep-canvas, guided launch, component library)

Overlay 190 upstream items (V8.22→8.31) preserving trade-pro theme,
registry tests, and design docs. Re-applied full patch set on identical
anchors (discovery/env_for/blocks.css/type-mapping/locale-override/
theme_color/frontend entries/test_theme_pro_v3 mods) plus compose pins.

Verified: theme suites 35/35; dual-baseline full run 415 passed vs
pristine 386+29 ours, FAILED-set diff EMPTY (same 10 Windows env fails).
Live: container 8.31.1-dev.1 healthy, hesupipe 192 entries intact,
trade-pro build 203 pages 0 errors.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-26 09:43:17 +08:00
parent a63548c645
commit 8884e100f9
647 changed files with 20853 additions and 271 deletions
+1
View File
@@ -0,0 +1 @@
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SiteForge V8.22 高级可视化编辑器验收</title><style>body{margin:0;background:#f1f3f6;font:14px/1.75 system-ui,"Microsoft Yahei";color:#2c3c50}main{max-width:1100px;margin:36px auto;padding:33px 43px;background:#fff;border-radius:17px;box-shadow:0 18px 55px #354b6211}h1{font-size:28px;line-height:1.35}h2{margin-top:30px}h3{margin:20px 0 9px}.kpi{display:flex;gap:12px}.kpi div{flex:1;background:#f5f7fa;border-radius:12px;padding:18px 19px}.kpi b{font-size:28px;color:#228469}.note{background:#fff5e9;border-left:4px solid #e18a4b;padding:13px 18px;border-radius:7px}table{width:100%;border-collapse:collapse}th,td{text-align:left;border-bottom:1px solid #e6eaf0;padding:10px;font-size:12px}code{color:#526c88}a{color:#d56b2c}</style></head><body><main><small>SiteForge Enterprise · 2026-10-23</small><h1>V8.22 高级可视化编辑器 — 集成验收</h1><div class="kpi"><div><span>分组 Python 测试</span><br><b>348</b><br>42 个模块</div><div><span>Node 专项测试</span><br><b>9</b><br>安全边界与操作</div><div><span>HTTP + Worker</span><br><b>PASS</b><br>隔离 SQLite 环境</div></div><p class="note">一键回归仍有偶发进程停滞;Chromium 被运行环境阻止访问本机 HTTP。不能据此声称真实浏览器全流程或生产环境已经验收通过。</p><h2>本次实现</h2><p>画布选中区块、拖拽调整顺序、快捷工具栏、直接编辑顶层文案、布局列宽控制、下方插入组件,继续沿用既有草稿/版本/审批流程。</p><h2>回归记录</h2><table><thead><tr><th>批次</th><th>测试数</th><th>结果</th><th>原始日志</th></tr></thead><tbody><tr><td>前段批次 1</td><td>43</td><td>PASS</td><td><code>reports/v822-regression_logs/round1-batch1.log</code></td></tr><tr><td>前段批次 2</td><td>22</td><td>PASS</td><td><code>reports/v822-regression_logs/round1-batch2.log</code></td></tr><tr><td>前段批次 3</td><td>50</td><td>PASS</td><td><code>reports/v822-regression_logs/round1-batch3.log</code></td></tr><tr><td>前段批次 4</td><td>28</td><td>PASS</td><td><code>reports/v822-regression_logs/round1-batch4.log</code></td></tr><tr><td>前段批次 5</td><td>29</td><td>PASS</td><td><code>reports/v822-regression_logs/round1-batch5.log</code></td></tr><tr><td>前段批次 6</td><td>25</td><td>PASS</td><td><code>reports/v822-regression_logs/round1-batch6.log</code></td></tr><tr><td>独立后段 1</td><td>36</td><td>PASS</td><td><code>reports/v822-tail-logs/tail-01.log</code></td></tr><tr><td>独立后段 2</td><td>15</td><td>PASS</td><td><code>reports/v822-tail-logs/tail-02.log</code></td></tr><tr><td>独立后段 3</td><td>11</td><td>PASS</td><td><code>reports/v822-tail-logs/tail-03.log</code></td></tr><tr><td>独立后段 4</td><td>8</td><td>PASS</td><td><code>reports/v822-tail-logs/tail-04.log</code></td></tr><tr><td>独立后段 5</td><td>14</td><td>PASS</td><td><code>reports/v822-tail-logs/tail-05.log</code></td></tr><tr><td>独立后段 6</td><td>12</td><td>PASS</td><td><code>reports/v822-tail-logs/tail-06.log</code></td></tr><tr><td>独立后段 7</td><td>13</td><td>PASS</td><td><code>reports/v822-tail-logs/tail-07.log</code></td></tr><tr><td>独立后段 8</td><td>22</td><td>PASS</td><td><code>reports/v822-tail-logs/tail-08.log</code></td></tr><tr><td>WordPress 末组 A</td><td>10</td><td>PASS</td><td><code>reports/v822-tail-logs/tail-09a.log</code></td></tr><tr><td>WordPress 末组 B</td><td>10</td><td>PASS</td><td><code>reports/v822-tail-logs/tail-09b.log</code></td></tr></tbody></table><h2>未完成门禁</h2><p>真实 PostgreSQL/Redis、Docker 多 Worker、上线/回滚、官方 Art Design Pro 工程编译、复杂 WordPress 实站、浏览器经 HTTP 登录到编辑器的全链路验收均未关闭。</p><p>完整说明见报告 Markdown 与 JSON。交互预览不接入生产数据。</p></main></body></html>
+117
View File
@@ -0,0 +1,117 @@
{
"version": "8.22.0-dev.1",
"date": "2026-10-23",
"baseline": "8.21.3-dev.1",
"python_regression": {
"modules": 42,
"passed": 348,
"failed_in_completed_groups": 0,
"one_click_runner_status": "NOT_PASSED: repeated intermittent test subprocess hang",
"execution": "first 24 modules in 6 grouped batches; last 18 modules in 8 pairs + 2 standalone tests",
"groups": [
{
"id": "前段批次 1",
"passed": 43,
"status": "PASS",
"log": "reports/v822-regression_logs/round1-batch1.log"
},
{
"id": "前段批次 2",
"passed": 22,
"status": "PASS",
"log": "reports/v822-regression_logs/round1-batch2.log"
},
{
"id": "前段批次 3",
"passed": 50,
"status": "PASS",
"log": "reports/v822-regression_logs/round1-batch3.log"
},
{
"id": "前段批次 4",
"passed": 28,
"status": "PASS",
"log": "reports/v822-regression_logs/round1-batch4.log"
},
{
"id": "前段批次 5",
"passed": 29,
"status": "PASS",
"log": "reports/v822-regression_logs/round1-batch5.log"
},
{
"id": "前段批次 6",
"passed": 25,
"status": "PASS",
"log": "reports/v822-regression_logs/round1-batch6.log"
},
{
"id": "独立后段 1",
"passed": 36,
"status": "PASS",
"log": "reports/v822-tail-logs/tail-01.log"
},
{
"id": "独立后段 2",
"passed": 15,
"status": "PASS",
"log": "reports/v822-tail-logs/tail-02.log"
},
{
"id": "独立后段 3",
"passed": 11,
"status": "PASS",
"log": "reports/v822-tail-logs/tail-03.log"
},
{
"id": "独立后段 4",
"passed": 8,
"status": "PASS",
"log": "reports/v822-tail-logs/tail-04.log"
},
{
"id": "独立后段 5",
"passed": 14,
"status": "PASS",
"log": "reports/v822-tail-logs/tail-05.log"
},
{
"id": "独立后段 6",
"passed": 12,
"status": "PASS",
"log": "reports/v822-tail-logs/tail-06.log"
},
{
"id": "独立后段 7",
"passed": 13,
"status": "PASS",
"log": "reports/v822-tail-logs/tail-07.log"
},
{
"id": "独立后段 8",
"passed": 22,
"status": "PASS",
"log": "reports/v822-tail-logs/tail-08.log"
},
{
"id": "WordPress 末组 A",
"passed": 10,
"status": "PASS",
"log": "reports/v822-tail-logs/tail-09a.log"
},
{
"id": "WordPress 末组 B",
"passed": 10,
"status": "PASS",
"log": "reports/v822-tail-logs/tail-09b.log"
}
]
},
"javascript_node_tests": 9,
"http_worker_e2e": "PASS: SQLite sandbox, Web -> login/CSRF -> site/page -> enqueue -> worker -> ZIP -> preview",
"browser_canvas": "PASS: isolated sandbox srcdoc Chromium, select/duplicate/add-after/keyboard-resize",
"browser_demo": "PASS: Chromium page.set_content, duplicate/undo/add/device/save",
"browser_live_http": "BLOCKED_BY_ADMINISTRATOR (environment restriction)",
"enterprise_postgres_redis_docker_remote_publish": "NOT_TESTED",
"art_design_pro_official_full_build": "NOT_TESTED"
}
+62
View File
@@ -0,0 +1,62 @@
# SiteForge Enterprise V8.22.0-dev.1 — 高级可视化编辑器验收报告
**验收日期:2026-10-23**
**源代码基线:V8.21.3**
**状态:开发集成版(不能宣布生产可上线)**
## 本轮交付
- 将静态构建相同的声明式区块渲染为可操作画布;点击区块显示高亮及操作条。
- 从画布直接移动、拖拽排序、复制、删除区块及在当前区块下方插入组件。
- 对顶层区块的标题和支持的描述执行双击编辑(保留 HTML 安全渲染)。
- 对声明式多列布局提供桌面端拖动列宽、键盘调整列宽,约束每列权重在 0.5~4,服务端仍用原有蓝图校验。
- 直接操作继续走原草稿版本、撤销历史、冲突检查和发布审批,不修改数据库 Schema 或已发布静态构建。
- 保留四套主题移动端抽屉导航、可选底部 Tabs 及此前所有功能。
## 验证
**42 个 Python 模块的 348 项自动化用例均在独立组合中通过。** 旧一键回归进程在第 7 批偶发卡住;因此不得声明“一键回归通过”。
| 分组 | 用例 | 结果 | 日志 |
|---|---:|---|---|
| 前段批次 1 | 43 | PASS | `reports/v822-regression_logs/round1-batch1.log` |
| 前段批次 2 | 22 | PASS | `reports/v822-regression_logs/round1-batch2.log` |
| 前段批次 3 | 50 | PASS | `reports/v822-regression_logs/round1-batch3.log` |
| 前段批次 4 | 28 | PASS | `reports/v822-regression_logs/round1-batch4.log` |
| 前段批次 5 | 29 | PASS | `reports/v822-regression_logs/round1-batch5.log` |
| 前段批次 6 | 25 | PASS | `reports/v822-regression_logs/round1-batch6.log` |
| 独立后段 1 | 36 | PASS | `reports/v822-tail-logs/tail-01.log` |
| 独立后段 2 | 15 | PASS | `reports/v822-tail-logs/tail-02.log` |
| 独立后段 3 | 11 | PASS | `reports/v822-tail-logs/tail-03.log` |
| 独立后段 4 | 8 | PASS | `reports/v822-tail-logs/tail-04.log` |
| 独立后段 5 | 14 | PASS | `reports/v822-tail-logs/tail-05.log` |
| 独立后段 6 | 12 | PASS | `reports/v822-tail-logs/tail-06.log` |
| 独立后段 7 | 13 | PASS | `reports/v822-tail-logs/tail-07.log` |
| 独立后段 8 | 22 | PASS | `reports/v822-tail-logs/tail-08.log` |
| WordPress 末组 A | 10 | PASS | `reports/v822-tail-logs/tail-09a.log` |
| WordPress 末组 B | 10 | PASS | `reports/v822-tail-logs/tail-09b.log` |
- Node 测试:9 项通过;新增未知区块 ID、越界宽度、非法文字字段等边界校验。
- Python 全模块编译、Node JS 语法检查:通过。
- HTTP + Worker E2E:通过(隔离 SQLite,仅验证登录、建站、Worker 静态构建、ZIP、预览)。
- Chromium 真实渲染的 sandbox srcdoc 画布:选中、复制、下方插入、键盘调列宽通过。
- Chromium 离线交互演示:复制、撤销、添加、设备切换、模拟保存通过。
- **真正通过 HTTP 登录进入编辑器的 Chromium 测试未完成**:浏览器对 localhost 报 `ERR_BLOCKED_BY_ADMINISTRATOR`,测试脚本 `scripts/studio_canvas_smoke_v822.py` 已提供用于正常环境执行。
- 未执行真实 PostgreSQL/Redis/Docker 多 Worker、远程部署、Art Design Pro 官方工程编译及真实客户站数据迁移。
## 完成边界与后续
本轮交付是**区块画布级可视化操作**,不是任意坐标、任意绝对定位或完整 Figma 式设计器。嵌套布局中的子组件仍主要依靠右侧表单编辑;自由画布组合、复用组件级联升级、多用户实时协作、全端真实设备测试仍需后续推进。
## 快速检查
```bash
python -m pytest -q tests/test_v822_canvas.py tests/test_studio_v86.py
node --test tests_js/*.test.cjs
python scripts/http_end_to_end.py
python scripts/studio_canvas_isolated_browser_v822.py
# 正常具备本地 HTTP 浏览器访问权限的环境:
SITEFORGE_CHROMIUM=/usr/bin/chromium python scripts/studio_canvas_smoke_v822.py
```
交互预览:`examples/Studio_V8_22_画布级可视化编辑器_交互演示.html`(模拟数据,不写入真实站点)。
File diff suppressed because one or more lines are too long
+15
View File
@@ -0,0 +1,15 @@
{
"version": "8.25.0-dev.1",
"generated_utc": "2026-10-23T06:17:16.783401+00:00",
"python_cases_passed": 370,
"batches_passed": 23,
"batches_total": 23,
"failed_batches": 0,
"node_js_cases_passed": 13,
"http_worker_e2e": "passed",
"chromium_offline_demo": "passed (desktop/mobile, isolated HTML)",
"official_art_build": "not_tested",
"postgres_redis_docker_production": "not_tested",
"authenticated_real_browser": "not_tested",
"all_python_batches_passed": true
}
+24
View File
@@ -0,0 +1,24 @@
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SiteForge V8.25 集成验收报告</title><style>
body{margin:0;background:#f5f7fa;color:#273a53;font:14px system-ui,"Microsoft Yahei",sans-serif}.head{background:#fff;border-bottom:1px solid #e1e7ef;padding:20px max(calc((100vw - 1100px)/2),20px)}main{max-width:1100px;margin:36px auto;padding:0 20px}h1{font-size:28px;margin:12px 0}h2{font-size:18px;margin-top:30px}p{line-height:1.8;color:#62738a}.overline{color:#c5682c;font-size:12px;font-weight:800;letter-spacing:.08em}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:24px 0}.metric{background:white;border:1px solid #e5eaf0;border-radius:14px;padding:22px}.number{font-size:32px;font-weight:800;color:#20846a}.label{color:#69798b;font-size:12px}.card{background:#fff;border:1px solid #e6eaf0;border-radius:14px;padding:25px;margin:15px 0}table{width:100%;border-collapse:collapse;font-size:12px}td,th{text-align:left;padding:11px;border-bottom:1px solid #e8edf3}th{color:#53667c}tr:hover{background:#f8fafc}.ok{color:#19805e}.warning{font-size:13px;color:#93552b;background:#fff9f1;padding:15px;border-radius:10px;border:1px solid #ecd6bf}@media(max-width:700px){.metrics{grid-template-columns:repeat(2,1fr)}table{display:block;overflow:auto}}</style></head><body><div class="head"><b>◈ SiteForge Enterprise</b><span style="float:right;color:#687888">V8.25.0-dev.1 · 开发集成版</span></div><main><div class="overline">INTEGRATION ACCEPTANCE</div><h1>V8.25 · 公共组件与全站设计系统</h1><p>根据真实隔离测试批次的原始输出自动汇总;组件更新仅生成新草稿,不触及已发布页面。</p><div class="metrics"><div class="metric"><div class="number">370</div><div class="label">Python 用例通过</div></div><div class="metric"><div class="number">23/23</div><div class="label">隔离测试批次通过</div></div><div class="metric"><div class="number">13</div><div class="label">JavaScript 用例通过</div></div><div class="metric"><div class="number">0</div><div class="label">失败或超时批次</div></div></div><div class="card"><h2>本阶段集成结果</h2><p>✓ 公共组件不可变版本历史、源组件更新乐观锁、引用页面扫描与过期预检保护</p><p>✓ 本地修改、跨网站访问、并发草稿变更与非法引用拦截</p><p>✓ 批量同步事务:第二个页面失败则整批草稿回滚,不直接修改发布页面</p><p>✓ HTTP + Worker 建站、构建、下载 ZIP 和预览;隔离 Chromium PC/手机交互演示</p></div><div class="warning"><b>尚未验证:</b>真实 PostgreSQL/Redis 多 Worker、正式 Docker 部署、线上 Agent/SFTP/S3 发布、官方 Art Design Pro 编译及登录后台后的浏览器 E2E。这些不属于本报告的通过项。</div><div class="card"><h2>分批回归明细</h2><table><thead><tr><th>批次</th><th>模块</th><th>通过用例</th><th>耗时(秒)</th><th>状态</th></tr></thead><tbody><tr><td>01</td><td>test_commercial_v5.py, test_connectors_v84.py</td><td>20</td><td>6.77</td><td><b class="ok">passed</b></td></tr>
<tr><td>02</td><td>test_connectors_v85.py, test_console_v819.py</td><td>23</td><td>6.95</td><td><b class="ok">passed</b></td></tr>
<tr><td>03</td><td>test_core_v4.py, test_deep_nested_v824.py</td><td>19</td><td>9.55</td><td><b class="ok">passed</b></td></tr>
<tr><td>04</td><td>test_editor_easy_v8212.py, test_editor_ux_v8211.py</td><td>6</td><td>3.19</td><td><b class="ok">passed</b></td></tr>
<tr><td>05</td><td>test_enterprise.py, test_enterprise_v7.py</td><td>16</td><td>9.12</td><td><b class="ok">passed</b></td></tr>
<tr><td>06</td><td>test_factory.py, test_factory_v2.py</td><td>24</td><td>22.35</td><td><b class="ok">passed</b></td></tr>
<tr><td>07</td><td>test_mobile_tabs_v8213.py, test_multilingual_v815.py</td><td>20</td><td>10.41</td><td><b class="ok">passed</b></td></tr>
<tr><td>08</td><td>test_nested_v823.py, test_p0_71.py</td><td>8</td><td>5.36</td><td><b class="ok">passed</b></td></tr>
<tr><td>09</td><td>test_p0_backup.py, test_p0_p4_completion_v88.py</td><td>19</td><td>11.91</td><td><b class="ok">passed</b></td></tr>
<tr><td>10</td><td>test_p0_p4_completion_v89.py, test_p1_platform.py</td><td>14</td><td>11.28</td><td><b class="ok">passed</b></td></tr>
<tr><td>11</td><td>test_production_v816.py, test_professional_ui_v811.py</td><td>15</td><td>47.32</td><td><b class="ok">passed</b></td></tr>
<tr><td>12</td><td>test_regression_runner_v817.py, test_release_native_v814.py</td><td>11</td><td>4.36</td><td><b class="ok">passed</b></td></tr>
<tr><td>13</td><td>test_release_reviews_v7.py, test_release_v813.py</td><td>14</td><td>5.3</td><td><b class="ok">passed</b></td></tr>
<tr><td>14</td><td>test_site_design_v87.py, test_siteforge_v817_audit.py</td><td>36</td><td>8.26</td><td><b class="ok">passed</b></td></tr>
<tr><td>15</td><td>test_studio_v86.py, test_theme_pro_v3.py</td><td>15</td><td>13.84</td><td><b class="ok">passed</b></td></tr>
<tr><td>16</td><td>test_v818_pg_recovery.py, test_v818_sqlite_pg_transfer.py</td><td>11</td><td>3.59</td><td><b class="ok">passed</b></td></tr>
<tr><td>17</td><td>test_v821_editor_history_and_mapping.py, test_v822_canvas.py</td><td>8</td><td>5.73</td><td><b class="ok">passed</b></td></tr>
<tr><td>18</td><td>test_v825_shared_components.py, test_v8_art_installer.py</td><td>11</td><td>5.8</td><td><b class="ok">passed</b></td></tr>
<tr><td>19</td><td>test_v8_workflows.py, test_wordpress_baseline.py</td><td>19</td><td>4.69</td><td><b class="ok">passed</b></td></tr>
<tr><td>20</td><td>test_worker_queue_v6.py, test_workspace_v810.py</td><td>10</td><td>10.48</td><td><b class="ok">passed</b></td></tr>
<tr><td>21</td><td>test_workspace_v812.py, test_wp_complex_v820.py</td><td>21</td><td>6.13</td><td><b class="ok">passed</b></td></tr>
<tr><td>22</td><td>test_wp_migration_v81.py, test_wp_migration_v82.py</td><td>20</td><td>9.18</td><td><b class="ok">passed</b></td></tr>
<tr><td>23</td><td>test_wp_migration_v83.py</td><td>10</td><td>5.12</td><td><b class="ok">passed</b></td></tr></tbody></table></div><p>原始证据:<code>reports/v825-regression/batch-*.log</code>、<code>reports/v825-regression/result.json</code>。本报告不代表已经在正式客户网站上线。</p></main></body></html>
+47
View File
@@ -0,0 +1,47 @@
# V8.25 开发集成验收报告
- 完整 Python 回归:370 个用例,23 个隔离批次,失败批次 0。
- Node.js JavaScript 单元测试:13 项通过。
- 真实 HTTP + Worker 端到端:登录/CSRF、创建站点、创建页面、入队、Worker 构建、ZIP 与预览通过。
- Chromium 隔离 HTML 演示:PC / 390px 手机布局、引用勾选与选择性同步交互通过,脚本错误 0。
- Python 编译、JS 语法、版本/主题/Worker 静态校验通过。
## 功能验收
公共组件不可变版本、历史快照校验、选择性同步、旧版迁移、跨站点权限、本地修改保护、草稿原子更新/异常整体回滚及已发布页面保持不变均有专项测试。
## 仍未完成的真实环境验收
- 真实 PostgreSQL/Redis、多 Worker、Docker、恢复演练与线上发布。
- Art Design Pro 官方前端工程编译。
- 真实登录后台的 Chromium E2E、手机真机测试。
## 各批详情
| 批次 | 测试模块 | 用例通过 | 耗时(s) | 结果 |
|---|---|---:|---:|---|
| 01 | test_commercial_v5.py, test_connectors_v84.py | 20 | 6.77 | passed |
| 02 | test_connectors_v85.py, test_console_v819.py | 23 | 6.95 | passed |
| 03 | test_core_v4.py, test_deep_nested_v824.py | 19 | 9.55 | passed |
| 04 | test_editor_easy_v8212.py, test_editor_ux_v8211.py | 6 | 3.19 | passed |
| 05 | test_enterprise.py, test_enterprise_v7.py | 16 | 9.12 | passed |
| 06 | test_factory.py, test_factory_v2.py | 24 | 22.35 | passed |
| 07 | test_mobile_tabs_v8213.py, test_multilingual_v815.py | 20 | 10.41 | passed |
| 08 | test_nested_v823.py, test_p0_71.py | 8 | 5.36 | passed |
| 09 | test_p0_backup.py, test_p0_p4_completion_v88.py | 19 | 11.91 | passed |
| 10 | test_p0_p4_completion_v89.py, test_p1_platform.py | 14 | 11.28 | passed |
| 11 | test_production_v816.py, test_professional_ui_v811.py | 15 | 47.32 | passed |
| 12 | test_regression_runner_v817.py, test_release_native_v814.py | 11 | 4.36 | passed |
| 13 | test_release_reviews_v7.py, test_release_v813.py | 14 | 5.3 | passed |
| 14 | test_site_design_v87.py, test_siteforge_v817_audit.py | 36 | 8.26 | passed |
| 15 | test_studio_v86.py, test_theme_pro_v3.py | 15 | 13.84 | passed |
| 16 | test_v818_pg_recovery.py, test_v818_sqlite_pg_transfer.py | 11 | 3.59 | passed |
| 17 | test_v821_editor_history_and_mapping.py, test_v822_canvas.py | 8 | 5.73 | passed |
| 18 | test_v825_shared_components.py, test_v8_art_installer.py | 11 | 5.8 | passed |
| 19 | test_v8_workflows.py, test_wordpress_baseline.py | 19 | 4.69 | passed |
| 20 | test_worker_queue_v6.py, test_workspace_v810.py | 10 | 10.48 | passed |
| 21 | test_workspace_v812.py, test_wp_complex_v820.py | 21 | 6.13 | passed |
| 22 | test_wp_migration_v81.py, test_wp_migration_v82.py | 20 | 9.18 | passed |
| 23 | test_wp_migration_v83.py | 10 | 5.12 | passed |
报告来源:`reports/v825-regression/batch-*.log` 和 `result.json`。**模拟与离线测试不能视为生产服务器验收。**
+6
View File
@@ -0,0 +1,6 @@
{
"checks": 72,
"issues": [],
"script_errors": [],
"status": "passed"
}
@@ -0,0 +1 @@
<!doctype html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SiteForge V8.30 验收报告</title><style>body{font-family:system-ui,'Microsoft Yahei',sans-serif;background:#f1f4f6;color:#203044;margin:0}main{max-width:960px;margin:auto;padding:45px 25px}h1{font-size:31px}.muted{color:#708094}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin:30px 0}.stat{background:white;padding:20px;border:1px solid #dde5eb;border-radius:12px}.num{font-size:35px;font-weight:800;color:#187a65}section{background:white;padding:22px;border-radius:12px;margin:15px 0}table{width:100%;border-collapse:collapse}td,th{text-align:left;padding:12px;border-bottom:1px solid #e5edf0}a{color:#087b91}@media(max-width:650px){.stats{grid-template-columns:repeat(2,1fr)}}</style></head><body><main><small class="muted">SITEFORGE · V8.30.0-dev.1 / LOCAL INTEGRATION</small><h1>四套主题真实页面设计验收</h1><p class="muted">本报告来自隔离环境的自动化测试及示例静态构建。它不是正式服务器生产验收。</p><div class="stats"><div class="stat"><div class="num">390</div>Python 测试通过</div><div class="stat"><div class="num">39</div>JavaScript 测试通过</div><div class="stat"><div class="num">144</div>生成页面</div><div class="stat"><div class="num">72</div>手机组合检查</div></div><section><h2>静态构建质量</h2><table><thead><tr><th>主题</th><th>生成页面</th><th>错误</th><th>警告</th></tr></thead><tbody><tr><td>automotive</td><td>36</td><td>0</td><td>8</td></tr><tr><td>industrial</td><td>36</td><td>0</td><td>8</td></tr><tr><td>corporate</td><td>36</td><td>0</td><td>8</td></tr><tr><td>minimal</td><td>36</td><td>0</td><td>8</td></tr></tbody></table></section><section><h2>视觉与兼容性</h2><p>四套主题均提供首页、列表、详情、文章、关于和联系页面的专有视觉设计;375、390、430px 真实 Chromium 视口检查 72/72 通过,未发现横向溢出或脚本错误。</p><p>老版本 v1.2.0 完整存档并通过锁定版本构建检查;原 URL、SEO、数据层不变。</p></section><section><h2>交付边界</h2><p>正式 Art Design Pro 编译、真实企业内容视觉验收、真实 iOS/Android 设备、PostgreSQL/Redis 多 Worker 与正式服务器发布仍未完成,不得标记为已通过。</p><p><a href="../examples/V8_30_四套主题_真实页面交互预览.html">打开四套主题 × 六类页面预览 →</a></p></section></main></body></html>
File diff suppressed because one or more lines are too long
+227
View File
@@ -0,0 +1,227 @@
{
"version": "8.24.0-dev.1",
"generated_utc": "2026-10-23T05:52:43.722866+00:00",
"groups": [
{
"batch": 1,
"files": [
"test_commercial_v5.py",
"test_connectors_v84.py"
],
"status": "passed",
"seconds": 10.53,
"summary": ".................... [100%]\n20 passed in 4.39s\n\n"
},
{
"batch": 2,
"files": [
"test_connectors_v85.py",
"test_console_v819.py"
],
"status": "passed",
"seconds": 5.77,
"summary": "....................... [100%]\n23 passed in 3.01s\n\n"
},
{
"batch": 3,
"files": [
"test_core_v4.py",
"test_deep_nested_v824.py"
],
"status": "passed",
"seconds": 7.15,
"summary": "................ [100%]\n16 passed in 4.64s\n\n"
},
{
"batch": 4,
"files": [
"test_editor_easy_v8212.py",
"test_editor_ux_v8211.py"
],
"status": "failed",
"seconds": 2.4,
"summary": "=====\nFAILED tests/test_editor_easy_v8212.py::test_no_change_to_block_blueprint_or_database_schema - AssertionError: assert (False)\n + where False = <built-in method startswith of str object at 0x7f17ff4420b0>('8.23.')\n + where <built-in method startswith of str object at 0x7f17ff4420b0> = '8.24.0-dev.1'.startswith\n1 failed, 5 passed in 0.21s\n\n"
},
{
"batch": 5,
"files": [
"test_enterprise.py",
"test_enterprise_v7.py"
],
"status": "passed",
"seconds": 6.37,
"summary": "................ [100%]\n16 passed in 3.41s\n\n"
},
{
"batch": 6,
"files": [
"test_factory.py",
"test_factory_v2.py"
],
"status": "passed",
"seconds": 11.11,
"summary": "........................ [100%]\n24 passed in 8.33s\n\n"
},
{
"batch": 7,
"files": [
"test_mobile_tabs_v8213.py",
"test_multilingual_v815.py"
],
"status": "passed",
"seconds": 8.55,
"summary": ".................... [100%]\n20 passed in 5.20s\n\n"
},
{
"batch": 8,
"files": [
"test_nested_v823.py",
"test_p0_71.py"
],
"status": "passed",
"seconds": 8.56,
"summary": "........ [100%]\n8 passed in 1.72s\n\n"
},
{
"batch": 9,
"files": [
"test_p0_backup.py",
"test_p0_p4_completion_v88.py"
],
"status": "passed",
"seconds": 6.37,
"summary": "................... [100%]\n19 passed in 3.34s\n\n"
},
{
"batch": 10,
"files": [
"test_p0_p4_completion_v89.py",
"test_p1_platform.py"
],
"status": "passed",
"seconds": 9.35,
"summary": ".............. [100%]\n14 passed in 6.43s\n\n"
},
{
"batch": 11,
"files": [
"test_production_v816.py",
"test_professional_ui_v811.py"
],
"status": "passed",
"seconds": 4.9,
"summary": "............... [100%]\n15 passed in 2.25s\n\n"
},
{
"batch": 12,
"files": [
"test_regression_runner_v817.py",
"test_release_native_v814.py"
],
"status": "passed",
"seconds": 4.2,
"summary": "........... [100%]\n11 passed in 1.65s\n\n"
},
{
"batch": 13,
"files": [
"test_release_reviews_v7.py",
"test_release_v813.py"
],
"status": "passed",
"seconds": 5.37,
"summary": ".............. [100%]\n14 passed in 2.29s\n\n"
},
{
"batch": 14,
"files": [
"test_site_design_v87.py",
"test_siteforge_v817_audit.py"
],
"status": "passed",
"seconds": 9.73,
"summary": ".................................... [100%]\n36 passed in 6.78s\n\n"
},
{
"batch": 15,
"files": [
"test_studio_v86.py",
"test_theme_pro_v3.py"
],
"status": "passed",
"seconds": 11.52,
"summary": "............... [100%]\n15 passed in 8.54s\n\n"
},
{
"batch": 16,
"files": [
"test_v818_pg_recovery.py",
"test_v818_sqlite_pg_transfer.py"
],
"status": "passed",
"seconds": 3.53,
"summary": "........... [100%]\n11 passed in 0.93s\n\n"
},
{
"batch": 17,
"files": [
"test_v821_editor_history_and_mapping.py",
"test_v822_canvas.py"
],
"status": "passed",
"seconds": 4.76,
"summary": "........ [100%]\n8 passed in 2.07s\n\n"
},
{
"batch": 18,
"files": [
"test_v8_art_installer.py",
"test_v8_workflows.py"
],
"status": "passed",
"seconds": 4.94,
"summary": ".............. [100%]\n14 passed in 2.13s\n\n"
},
{
"batch": 19,
"files": [
"test_wordpress_baseline.py",
"test_worker_queue_v6.py"
],
"status": "passed",
"seconds": 9.08,
"summary": "............ [100%]\n12 passed in 6.46s\n\n"
},
{
"batch": 20,
"files": [
"test_workspace_v810.py",
"test_workspace_v812.py"
],
"status": "passed",
"seconds": 5.38,
"summary": "............. [100%]\n13 passed in 2.66s\n\n"
},
{
"batch": 21,
"files": [
"test_wp_complex_v820.py",
"test_wp_migration_v81.py"
],
"status": "passed",
"seconds": 5.19,
"summary": "...................... [100%]\n22 passed in 2.73s\n\n"
},
{
"batch": 22,
"files": [
"test_wp_migration_v82.py",
"test_wp_migration_v83.py"
],
"status": "passed",
"seconds": 8.31,
"summary": ".................... [100%]\n20 passed in 5.75s\n\n"
}
],
"all_passed": false
}
+227
View File
@@ -0,0 +1,227 @@
{
"version": "8.24.0-dev.1",
"generated_utc": "2026-10-23T05:56:01.776527+00:00",
"groups": [
{
"batch": 1,
"files": [
"test_commercial_v5.py",
"test_connectors_v84.py"
],
"status": "passed",
"seconds": 7.36,
"summary": ".................... [100%]\n20 passed in 4.30s\n\n"
},
{
"batch": 2,
"files": [
"test_connectors_v85.py",
"test_console_v819.py"
],
"status": "passed",
"seconds": 6.09,
"summary": "....................... [100%]\n23 passed in 3.24s\n\n"
},
{
"batch": 3,
"files": [
"test_core_v4.py",
"test_deep_nested_v824.py"
],
"status": "passed",
"seconds": 8.34,
"summary": ".................. [100%]\n18 passed in 5.22s\n\n"
},
{
"batch": 4,
"files": [
"test_editor_easy_v8212.py",
"test_editor_ux_v8211.py"
],
"status": "passed",
"seconds": 2.73,
"summary": "...... [100%]\n6 passed in 0.19s\n\n"
},
{
"batch": 5,
"files": [
"test_enterprise.py",
"test_enterprise_v7.py"
],
"status": "passed",
"seconds": 7.92,
"summary": "................ [100%]\n16 passed in 4.66s\n\n"
},
{
"batch": 6,
"files": [
"test_factory.py",
"test_factory_v2.py"
],
"status": "passed",
"seconds": 13.23,
"summary": "........................ [100%]\n24 passed in 9.86s\n\n"
},
{
"batch": 7,
"files": [
"test_mobile_tabs_v8213.py",
"test_multilingual_v815.py"
],
"status": "passed",
"seconds": 7.54,
"summary": ".................... [100%]\n20 passed in 5.05s\n\n"
},
{
"batch": 8,
"files": [
"test_nested_v823.py",
"test_p0_71.py"
],
"status": "passed",
"seconds": 4.97,
"summary": "........ [100%]\n8 passed in 1.98s\n\n"
},
{
"batch": 9,
"files": [
"test_p0_backup.py",
"test_p0_p4_completion_v88.py"
],
"status": "passed",
"seconds": 6.25,
"summary": "................... [100%]\n19 passed in 3.23s\n\n"
},
{
"batch": 10,
"files": [
"test_p0_p4_completion_v89.py",
"test_p1_platform.py"
],
"status": "passed",
"seconds": 9.47,
"summary": ".............. [100%]\n14 passed in 6.79s\n\n"
},
{
"batch": 11,
"files": [
"test_production_v816.py",
"test_professional_ui_v811.py"
],
"status": "passed",
"seconds": 5.08,
"summary": "............... [100%]\n15 passed in 2.28s\n\n"
},
{
"batch": 12,
"files": [
"test_regression_runner_v817.py",
"test_release_native_v814.py"
],
"status": "passed",
"seconds": 4.03,
"summary": "........... [100%]\n11 passed in 1.63s\n\n"
},
{
"batch": 13,
"files": [
"test_release_reviews_v7.py",
"test_release_v813.py"
],
"status": "passed",
"seconds": 4.78,
"summary": ".............. [100%]\n14 passed in 2.23s\n\n"
},
{
"batch": 14,
"files": [
"test_site_design_v87.py",
"test_siteforge_v817_audit.py"
],
"status": "passed",
"seconds": 9.07,
"summary": ".................................... [100%]\n36 passed in 5.67s\n\n"
},
{
"batch": 15,
"files": [
"test_studio_v86.py",
"test_theme_pro_v3.py"
],
"status": "passed",
"seconds": 13.3,
"summary": "............... [100%]\n15 passed in 10.02s\n\n"
},
{
"batch": 16,
"files": [
"test_v818_pg_recovery.py",
"test_v818_sqlite_pg_transfer.py"
],
"status": "passed",
"seconds": 3.96,
"summary": "........... [100%]\n11 passed in 0.88s\n\n"
},
{
"batch": 17,
"files": [
"test_v821_editor_history_and_mapping.py",
"test_v822_canvas.py"
],
"status": "passed",
"seconds": 4.93,
"summary": "........ [100%]\n8 passed in 2.14s\n\n"
},
{
"batch": 18,
"files": [
"test_v8_art_installer.py",
"test_v8_workflows.py"
],
"status": "passed",
"seconds": 6.3,
"summary": ".............. [100%]\n14 passed in 2.89s\n\n"
},
{
"batch": 19,
"files": [
"test_wordpress_baseline.py",
"test_worker_queue_v6.py"
],
"status": "passed",
"seconds": 9.87,
"summary": "............ [100%]\n12 passed in 6.83s\n\n"
},
{
"batch": 20,
"files": [
"test_workspace_v810.py",
"test_workspace_v812.py"
],
"status": "passed",
"seconds": 5.07,
"summary": "............. [100%]\n13 passed in 2.54s\n\n"
},
{
"batch": 21,
"files": [
"test_wp_complex_v820.py",
"test_wp_migration_v81.py"
],
"status": "passed",
"seconds": 5.63,
"summary": "...................... [100%]\n22 passed in 3.05s\n\n"
},
{
"batch": 22,
"files": [
"test_wp_migration_v82.py",
"test_wp_migration_v83.py"
],
"status": "passed",
"seconds": 8.06,
"summary": ".................... [100%]\n20 passed in 5.45s\n\n"
}
],
"all_passed": true
}
+236
View File
@@ -0,0 +1,236 @@
{
"version": "8.25.0-dev.1",
"generated_utc": "2026-10-23T06:15:39.511366+00:00",
"groups": [
{
"batch": 1,
"files": [
"test_commercial_v5.py",
"test_connectors_v84.py"
],
"status": "passed",
"seconds": 6.77,
"summary": ".................... [100%]\n20 passed in 4.04s\n\n"
},
{
"batch": 2,
"files": [
"test_connectors_v85.py",
"test_console_v819.py"
],
"status": "passed",
"seconds": 6.95,
"summary": "....................... [100%]\n23 passed in 3.63s\n\n"
},
{
"batch": 3,
"files": [
"test_core_v4.py",
"test_deep_nested_v824.py"
],
"status": "passed",
"seconds": 9.55,
"summary": "................... [100%]\n19 passed in 6.38s\n\n"
},
{
"batch": 4,
"files": [
"test_editor_easy_v8212.py",
"test_editor_ux_v8211.py"
],
"status": "passed",
"seconds": 3.19,
"summary": "...... [100%]\n6 passed in 0.27s\n\n"
},
{
"batch": 5,
"files": [
"test_enterprise.py",
"test_enterprise_v7.py"
],
"status": "passed",
"seconds": 9.12,
"summary": "................ [100%]\n16 passed in 4.97s\n\n"
},
{
"batch": 6,
"files": [
"test_factory.py",
"test_factory_v2.py"
],
"status": "passed",
"seconds": 22.35,
"summary": "........................ [100%]\n24 passed in 18.47s\n\n"
},
{
"batch": 7,
"files": [
"test_mobile_tabs_v8213.py",
"test_multilingual_v815.py"
],
"status": "passed",
"seconds": 10.41,
"summary": ".................... [100%]\n20 passed in 6.30s\n\n"
},
{
"batch": 8,
"files": [
"test_nested_v823.py",
"test_p0_71.py"
],
"status": "passed",
"seconds": 5.36,
"summary": "........ [100%]\n8 passed in 1.91s\n\n"
},
{
"batch": 9,
"files": [
"test_p0_backup.py",
"test_p0_p4_completion_v88.py"
],
"status": "passed",
"seconds": 11.91,
"summary": "................... [100%]\n19 passed in 4.22s\n\n"
},
{
"batch": 10,
"files": [
"test_p0_p4_completion_v89.py",
"test_p1_platform.py"
],
"status": "passed",
"seconds": 11.28,
"summary": ".............. [100%]\n14 passed in 7.95s\n\n"
},
{
"batch": 11,
"files": [
"test_production_v816.py",
"test_professional_ui_v811.py"
],
"status": "passed",
"seconds": 47.32,
"summary": "............... [100%]\n15 passed in 18.92s\n\n"
},
{
"batch": 12,
"files": [
"test_regression_runner_v817.py",
"test_release_native_v814.py"
],
"status": "passed",
"seconds": 4.36,
"summary": "........... [100%]\n11 passed in 1.64s\n\n"
},
{
"batch": 13,
"files": [
"test_release_reviews_v7.py",
"test_release_v813.py"
],
"status": "passed",
"seconds": 5.3,
"summary": ".............. [100%]\n14 passed in 2.29s\n\n"
},
{
"batch": 14,
"files": [
"test_site_design_v87.py",
"test_siteforge_v817_audit.py"
],
"status": "passed",
"seconds": 8.26,
"summary": ".................................... [100%]\n36 passed in 5.36s\n\n"
},
{
"batch": 15,
"files": [
"test_studio_v86.py",
"test_theme_pro_v3.py"
],
"status": "passed",
"seconds": 13.84,
"summary": "............... [100%]\n15 passed in 10.72s\n\n"
},
{
"batch": 16,
"files": [
"test_v818_pg_recovery.py",
"test_v818_sqlite_pg_transfer.py"
],
"status": "passed",
"seconds": 3.59,
"summary": "........... [100%]\n11 passed in 0.96s\n\n"
},
{
"batch": 17,
"files": [
"test_v821_editor_history_and_mapping.py",
"test_v822_canvas.py"
],
"status": "passed",
"seconds": 5.73,
"summary": "........ [100%]\n8 passed in 2.27s\n\n"
},
{
"batch": 18,
"files": [
"test_v825_shared_components.py",
"test_v8_art_installer.py"
],
"status": "passed",
"seconds": 5.8,
"summary": "........... [100%]\n11 passed in 3.15s\n\n"
},
{
"batch": 19,
"files": [
"test_v8_workflows.py",
"test_wordpress_baseline.py"
],
"status": "passed",
"seconds": 4.69,
"summary": "................... [100%]\n19 passed in 2.10s\n\n"
},
{
"batch": 20,
"files": [
"test_worker_queue_v6.py",
"test_workspace_v810.py"
],
"status": "passed",
"seconds": 10.48,
"summary": ".......... [100%]\n10 passed in 7.30s\n\n"
},
{
"batch": 21,
"files": [
"test_workspace_v812.py",
"test_wp_complex_v820.py"
],
"status": "passed",
"seconds": 6.13,
"summary": "..................... [100%]\n21 passed in 2.97s\n\n"
},
{
"batch": 22,
"files": [
"test_wp_migration_v81.py",
"test_wp_migration_v82.py"
],
"status": "passed",
"seconds": 9.18,
"summary": ".................... [100%]\n20 passed in 6.04s\n\n"
},
{
"batch": 23,
"files": [
"test_wp_migration_v83.py"
],
"status": "passed",
"seconds": 5.12,
"summary": ".......... [100%]\n10 passed in 2.38s\n\n"
}
],
"all_passed": true
}
+237
View File
@@ -0,0 +1,237 @@
{
"version": "8.26.0-dev.1",
"generated_utc": "2026-10-23T06:55:03.816817+00:00",
"groups": [
{
"batch": 1,
"files": [
"test_commercial_v5.py",
"test_connectors_v84.py"
],
"status": "passed",
"seconds": 14.81,
"summary": ".................... [100%]\n20 passed in 8.87s\n\n"
},
{
"batch": 2,
"files": [
"test_connectors_v85.py",
"test_console_v819.py"
],
"status": "passed",
"seconds": 8.82,
"summary": "....................... [100%]\n23 passed in 4.48s\n\n"
},
{
"batch": 3,
"files": [
"test_core_v4.py",
"test_deep_nested_v824.py"
],
"status": "passed",
"seconds": 10.38,
"summary": "................... [100%]\n19 passed in 6.82s\n\n"
},
{
"batch": 4,
"files": [
"test_editor_easy_v8212.py",
"test_editor_ux_v8211.py"
],
"status": "passed",
"seconds": 3.29,
"summary": "...... [100%]\n6 passed in 0.23s\n\n"
},
{
"batch": 5,
"files": [
"test_enterprise.py",
"test_enterprise_v7.py"
],
"status": "passed",
"seconds": 9.87,
"summary": "................ [100%]\n16 passed in 5.30s\n\n"
},
{
"batch": 6,
"files": [
"test_factory.py",
"test_factory_v2.py"
],
"status": "passed",
"seconds": 16.44,
"summary": "........................ [100%]\n24 passed in 12.21s\n\n"
},
{
"batch": 7,
"files": [
"test_mobile_tabs_v8213.py",
"test_multilingual_v815.py"
],
"status": "passed",
"seconds": 9.74,
"summary": ".................... [100%]\n20 passed in 5.88s\n\n"
},
{
"batch": 8,
"files": [
"test_nested_v823.py",
"test_p0_71.py"
],
"status": "passed",
"seconds": 5.27,
"summary": "........ [100%]\n8 passed in 1.94s\n\n"
},
{
"batch": 9,
"files": [
"test_p0_backup.py",
"test_p0_p4_completion_v88.py"
],
"status": "passed",
"seconds": 8.84,
"summary": "................... [100%]\n19 passed in 4.26s\n\n"
},
{
"batch": 10,
"files": [
"test_p0_p4_completion_v89.py",
"test_p1_platform.py"
],
"status": "passed",
"seconds": 12.21,
"summary": ".............. [100%]\n14 passed in 8.00s\n\n"
},
{
"batch": 11,
"files": [
"test_production_v816.py",
"test_professional_ui_v811.py"
],
"status": "passed",
"seconds": 7.73,
"summary": "............... [100%]\n15 passed in 3.46s\n\n"
},
{
"batch": 12,
"files": [
"test_regression_runner_v817.py",
"test_release_native_v814.py"
],
"status": "passed",
"seconds": 4.94,
"summary": "........... [100%]\n11 passed in 1.77s\n\n"
},
{
"batch": 13,
"files": [
"test_release_reviews_v7.py",
"test_release_v813.py"
],
"status": "passed",
"seconds": 6.97,
"summary": ".............. [100%]\n14 passed in 3.41s\n\n"
},
{
"batch": 14,
"files": [
"test_site_design_v87.py",
"test_siteforge_v817_audit.py"
],
"status": "passed",
"seconds": 8.91,
"summary": ".................................... [100%]\n36 passed in 5.83s\n\n"
},
{
"batch": 15,
"files": [
"test_studio_v86.py",
"test_theme_pro_v3.py"
],
"status": "passed",
"seconds": 10.86,
"summary": "............... [100%]\n15 passed in 7.97s\n\n"
},
{
"batch": 16,
"files": [
"test_v818_pg_recovery.py",
"test_v818_sqlite_pg_transfer.py"
],
"status": "passed",
"seconds": 4.07,
"summary": "........... [100%]\n11 passed in 0.99s\n\n"
},
{
"batch": 17,
"files": [
"test_v821_editor_history_and_mapping.py",
"test_v822_canvas.py"
],
"status": "passed",
"seconds": 6.21,
"summary": "........ [100%]\n8 passed in 2.71s\n\n"
},
{
"batch": 18,
"files": [
"test_v825_shared_components.py",
"test_v826_global_design.py"
],
"status": "passed",
"seconds": 8.74,
"summary": "................ [100%]\n16 passed in 5.28s\n\n"
},
{
"batch": 19,
"files": [
"test_v8_art_installer.py",
"test_v8_workflows.py"
],
"status": "passed",
"seconds": 5.79,
"summary": ".............. [100%]\n14 passed in 2.38s\n\n"
},
{
"batch": 20,
"files": [
"test_wordpress_baseline.py",
"test_worker_queue_v6.py"
],
"status": "passed",
"seconds": 9.3,
"summary": "............ [100%]\n12 passed in 6.38s\n\n"
},
{
"batch": 21,
"files": [
"test_workspace_v810.py",
"test_workspace_v812.py"
],
"status": "passed",
"seconds": 6.97,
"summary": "............. [100%]\n13 passed in 3.23s\n\n"
},
{
"batch": 22,
"files": [
"test_wp_complex_v820.py",
"test_wp_migration_v81.py"
],
"status": "passed",
"seconds": 6.56,
"summary": "...................... [100%]\n22 passed in 3.12s\n\n"
},
{
"batch": 23,
"files": [
"test_wp_migration_v82.py",
"test_wp_migration_v83.py"
],
"status": "passed",
"seconds": 9.28,
"summary": ".................... [100%]\n20 passed in 6.33s\n\n"
}
],
"all_passed": true
}
+7
View File
@@ -0,0 +1,7 @@
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>SiteForge V8.26 集成验收</title><style>
*{box-sizing:border-box}body{margin:0;background:#f5f7fa;font:14px system-ui,"Microsoft YaHei",sans-serif;color:#26374b}.hero{background:#163750;color:white;padding:32px max(20px,calc((100% - 1100px)/2))}h1{font-size:28px;margin:8px 0 10px}.hero p{color:#b7d8e8;line-height:1.7}main{max-width:1100px;padding:28px 16px;margin:auto}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.stat,.panel{border:1px solid #e5eaf0;background:white;border-radius:14px;padding:22px}.stat b{font-size:31px;color:#20846a}.stat span{display:block;color:#657789;font-size:12px}.panel{margin-top:18px}.panel h2{font-size:18px}.panel p,.panel li{line-height:1.8;color:#52677d}table{width:100%;border-collapse:collapse}th,td{border-bottom:1px solid #e3e9f0;text-align:left;padding:10px 8px;font-size:12px}th{color:#5e6f82}.warn{background:#fff9ee;border-left:3px solid #dca45f;padding:14px;color:#714827}@media(max-width:700px){.stats{grid-template-columns:repeat(2,1fr)}.panel{overflow:auto}}</style></head>
<body><header class="hero"><div style="font-size:12px;letter-spacing:.16em;color:#f6a468">SITEFORGE / TEST EVIDENCE</div><h1>V8.26 · 全站设计与导航管理</h1><p>完整源码的本地集成回归,包含原始日志和明确的环境验证边界。</p></header><main>
<div class="stats"><div class="stat"><b>376</b><span>Python 测试通过</span></div><div class="stat"><b>23/23</b><span>隔离回归批次</span></div><div class="stat"><b>13/13</b><span>JavaScript 单测</span></div><div class="stat"><b>0</b><span>失败或超时批次</span></div></div>
<section class="panel"><h2>已完成的功能验证</h2><ul><li>可视化导航新增、编辑与多级结构;原安全路径校验继续生效</li><li>草稿差异清单、版本绑定审核令牌与过期阻断</li><li>历史快照站点隔离、恢复为新草稿及线上内容不变</li><li>HTTP 登录/CSRF、站点及页面创建、Worker 构建、ZIP 下载、预览</li><li>隔离 Chromium 页面新增导航、保存、审核及历史交互;脚本错误 0</li></ul></section>
<section class="panel"><h2>未完成的真实环境验收</h2><div class="warn">正式 Art Design Pro 工程编译、真实登录后台的浏览器 E2E、生产 PostgreSQL/Redis 多 Worker、真实 Docker 灾备和远程部署均未执行。离线 Chromium 不能替代正式后台浏览器验收。</div></section>
<section class="panel"><h2>分批回归明细</h2><table><thead><tr><th>模块</th><th>通过数</th><th>耗时</th><th>结果</th></tr></thead><tbody><tr><td>test_commercial_v5.py、test_connectors_v84.py</td><td>20</td><td>14.81 s</td><td>通过</td></tr><tr><td>test_connectors_v85.py、test_console_v819.py</td><td>23</td><td>8.82 s</td><td>通过</td></tr><tr><td>test_core_v4.py、test_deep_nested_v824.py</td><td>19</td><td>10.38 s</td><td>通过</td></tr><tr><td>test_editor_easy_v8212.py、test_editor_ux_v8211.py</td><td>6</td><td>3.29 s</td><td>通过</td></tr><tr><td>test_enterprise.py、test_enterprise_v7.py</td><td>16</td><td>9.87 s</td><td>通过</td></tr><tr><td>test_factory.py、test_factory_v2.py</td><td>24</td><td>16.44 s</td><td>通过</td></tr><tr><td>test_mobile_tabs_v8213.py、test_multilingual_v815.py</td><td>20</td><td>9.74 s</td><td>通过</td></tr><tr><td>test_nested_v823.py、test_p0_71.py</td><td>8</td><td>5.27 s</td><td>通过</td></tr><tr><td>test_p0_backup.py、test_p0_p4_completion_v88.py</td><td>19</td><td>8.84 s</td><td>通过</td></tr><tr><td>test_p0_p4_completion_v89.py、test_p1_platform.py</td><td>14</td><td>12.21 s</td><td>通过</td></tr><tr><td>test_production_v816.py、test_professional_ui_v811.py</td><td>15</td><td>7.73 s</td><td>通过</td></tr><tr><td>test_regression_runner_v817.py、test_release_native_v814.py</td><td>11</td><td>4.94 s</td><td>通过</td></tr><tr><td>test_release_reviews_v7.py、test_release_v813.py</td><td>14</td><td>6.97 s</td><td>通过</td></tr><tr><td>test_site_design_v87.py、test_siteforge_v817_audit.py</td><td>36</td><td>8.91 s</td><td>通过</td></tr><tr><td>test_studio_v86.py、test_theme_pro_v3.py</td><td>15</td><td>10.86 s</td><td>通过</td></tr><tr><td>test_v818_pg_recovery.py、test_v818_sqlite_pg_transfer.py</td><td>11</td><td>4.07 s</td><td>通过</td></tr><tr><td>test_v821_editor_history_and_mapping.py、test_v822_canvas.py</td><td>8</td><td>6.21 s</td><td>通过</td></tr><tr><td>test_v825_shared_components.py、test_v826_global_design.py</td><td>16</td><td>8.74 s</td><td>通过</td></tr><tr><td>test_v8_art_installer.py、test_v8_workflows.py</td><td>14</td><td>5.79 s</td><td>通过</td></tr><tr><td>test_wordpress_baseline.py、test_worker_queue_v6.py</td><td>12</td><td>9.3 s</td><td>通过</td></tr><tr><td>test_workspace_v810.py、test_workspace_v812.py</td><td>13</td><td>6.97 s</td><td>通过</td></tr><tr><td>test_wp_complex_v820.py、test_wp_migration_v81.py</td><td>22</td><td>6.56 s</td><td>通过</td></tr><tr><td>test_wp_migration_v82.py、test_wp_migration_v83.py</td><td>20</td><td>9.28 s</td><td>通过</td></tr></tbody></table></section><p style="font-size:12px;color:#64748b">原始结果:reports/v826-regression/ · reports/v826/summary.json · HTTP / JS / browser 日志。</p></main></body></html>
+12
View File
@@ -0,0 +1,12 @@
{
"version": "8.26.0-dev.1",
"python_tests_passed": 376,
"python_batches_passed": 23,
"python_batches_failed": 0,
"javascript_tests_passed": 13,
"http_worker_e2e": "passed",
"isolated_chromium_demo": "passed_with_set_content",
"real_logged_in_browser": "not_verified",
"production_pg_redis_docker": "not_verified",
"official_art_build": "not_verified"
}
@@ -0,0 +1,7 @@
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SiteForge V8.27 集成验收</title><style>body{font:15px/1.65 system-ui,'Microsoft YaHei',sans-serif;background:#f6f8fb;color:#243247;max-width:1050px;margin:30px auto;padding:0 20px}h1{font-size:28px}p{line-height:1.8}.panel{padding:24px;border:1px solid #e5eaf1;border-radius:14px;background:white;margin:15px 0}.metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.metric{padding:16px;background:#f5f8fc;border-radius:12px}.metric b{display:block;font-size:27px;color:#245ac6}.metric small{color:#77899c}table{border-collapse:collapse;width:100%;font-size:13px}th,td{padding:10px;border-bottom:1px solid #e5ebf2;text-align:left}th{background:#f2f5fa}img{max-width:100%;border:1px solid #e1e6f0;border-radius:10px}.note{background:#fff6e5;border-left:4px solid #d6a15c;padding:15px}</style></head><body>
<h1>SiteForge V8.27 — 简洁后台与建站向导验收</h1><p>版本:8.27.0-dev.1 · 源码开发集成版 · 隔离环境验证</p>
<div class="metrics"><div class="metric"><b>379</b><small>Python 测试合计通过(含隔离复测)</small></div><div class="metric"><b>23</b><small>JavaScript 单测通过</small></div><div class="metric"><b>通过</b><small>HTTP + Worker 端到端</small></div></div>
<div class="panel"><h2>新增实际功能</h2><p>三步创建网站、自动识别下一步、WordPress 迁移分流、基于数据库/任务记录的状态展示、保存与上线概念区分、移动端易读布局。</p><img src="v827-guided-workspace.png" alt="真实工作台 JS 的隔离浏览器截图"></div>
<div class="panel"><h2>移动端验证</h2><p>390px 视口、抽屉初始关闭、无横向溢出;检查分步创建表单和引导步骤。</p><img src="v827-guided-mobile.png" alt="移动端操作指引"></div>
<div class="panel"><h2>Python 分批回归</h2><p>24 批中有 22 批直接通过。第 10 批组合运行超时,两个模块分别运行 7/7 通过;第 22 批旧断言绑定旧 UI 结构,改为校验新独立模型后 21/21 通过。原始超时与失败日志均保留,不称为一键全绿。</p><table><thead><tr><th>批次</th><th>测试模块</th><th>原始/复测状态</th><th>说明</th></tr></thead><tbody><tr><td>01</td><td>test_commercial_v5.py, test_connectors_v84.py</td><td>passed</td><td></td></tr><tr><td>02</td><td>test_connectors_v85.py, test_console_v819.py</td><td>passed</td><td></td></tr><tr><td>03</td><td>test_core_v4.py, test_deep_nested_v824.py</td><td>passed</td><td></td></tr><tr><td>04</td><td>test_editor_easy_v8212.py, test_editor_ux_v8211.py</td><td>passed</td><td></td></tr><tr><td>05</td><td>test_enterprise.py, test_enterprise_v7.py</td><td>passed</td><td></td></tr><tr><td>06</td><td>test_factory.py, test_factory_v2.py</td><td>passed</td><td></td></tr><tr><td>07</td><td>test_mobile_tabs_v8213.py, test_multilingual_v815.py</td><td>passed</td><td></td></tr><tr><td>08</td><td>test_nested_v823.py, test_p0_71.py</td><td>passed</td><td></td></tr><tr><td>09</td><td>test_p0_backup.py, test_p0_p4_completion_v88.py</td><td>passed</td><td></td></tr><tr><td>10</td><td>test_p0_p4_completion_v89.py, test_p1_platform.py</td><td>timeout / separately passed</td><td>两模块单独复测:7 + 7 = 14 通过</td></tr><tr><td>11</td><td>test_production_v816.py, test_professional_ui_v811.py</td><td>passed</td><td></td></tr><tr><td>12</td><td>test_regression_runner_v817.py, test_release_native_v814.py</td><td>passed</td><td></td></tr><tr><td>13</td><td>test_release_reviews_v7.py, test_release_v813.py</td><td>passed</td><td></td></tr><tr><td>14</td><td>test_site_design_v87.py, test_siteforge_v817_audit.py</td><td>passed</td><td></td></tr><tr><td>15</td><td>test_studio_v86.py, test_theme_pro_v3.py</td><td>passed</td><td></td></tr><tr><td>16</td><td>test_v818_pg_recovery.py, test_v818_sqlite_pg_transfer.py</td><td>passed</td><td></td></tr><tr><td>17</td><td>test_v821_editor_history_and_mapping.py, test_v822_canvas.py</td><td>passed</td><td></td></tr><tr><td>18</td><td>test_v825_shared_components.py, test_v826_global_design.py</td><td>passed</td><td></td></tr><tr><td>19</td><td>test_v827_guided_workspace.py, test_v8_art_installer.py</td><td>passed</td><td></td></tr><tr><td>20</td><td>test_v8_workflows.py, test_wordpress_baseline.py</td><td>passed</td><td></td></tr><tr><td>21</td><td>test_worker_queue_v6.py, test_workspace_v810.py</td><td>passed</td><td></td></tr><tr><td>22</td><td>test_workspace_v812.py, test_wp_complex_v820.py</td><td>assertion migration / retested</td><td>旧结构断言已迁移,21 项重新通过</td></tr><tr><td>23</td><td>test_wp_migration_v81.py, test_wp_migration_v82.py</td><td>passed</td><td></td></tr><tr><td>24</td><td>test_wp_migration_v83.py</td><td>passed</td><td></td></tr></tbody></table></div>
<div class="panel note"><strong>未通过的正式验收门槛:</strong>原一键回归稳定性、正式 Art Design Pro 工程编译、真实后台登录浏览器 E2E、PostgreSQL/Redis 多 Worker、生产远程发布与灾备。演示使用模拟数据,不会操作真实网站。</div></body></html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 161 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 217 KiB

+293
View File
@@ -0,0 +1,293 @@
{
"version": "8.28.0-dev.1",
"created_utc": "2026-10-23T08:05:11.263013+00:00",
"regression_modules": 48,
"regression_batches": 24,
"regression_passed_batches": 23,
"regression_test_cases_passed": 383,
"regression_unpassed_batches_initial": 1,
"regression_unresolved_batches": 0,
"regression_retests": [
{
"batch": 22,
"passed": 13,
"reason": "旧 UI 测试断言仍要求“构建与交付”菜单;已更新为“生成与预览 / 检查并上线”,原样保留失败日志并独立重新测试。"
}
],
"regression_verified_batches": 24,
"browser_test": "PASS: Chromium with mock API, no real server deployment",
"http_e2e": "PASS: real local HTTP + Worker with isolated SQLite",
"real_art_pro_build": "NOT_VERIFIED",
"production_postgres_redis_multi_worker": "NOT_VERIFIED",
"real_remote_release_rollback": "NOT_VERIFIED",
"notes": [
"Explicitly separate local tests from production acceptance.",
"Release process reuses server-side quality gates, independent approval and worker API."
],
"batches": [
{
"batch": 1,
"files": [
"test_commercial_v5.py",
"test_connectors_v84.py"
],
"status": "passed",
"seconds": 7.46,
"summary": ".................... [100%]\n20 passed in 4.03s\n\n",
"passed_count": 20
},
{
"batch": 2,
"files": [
"test_connectors_v85.py",
"test_console_v819.py"
],
"status": "passed",
"seconds": 7.77,
"summary": "....................... [100%]\n23 passed in 3.51s\n\n",
"passed_count": 23
},
{
"batch": 3,
"files": [
"test_core_v4.py",
"test_deep_nested_v824.py"
],
"status": "passed",
"seconds": 9.53,
"summary": "................... [100%]\n19 passed in 6.06s\n\n",
"passed_count": 19
},
{
"batch": 4,
"files": [
"test_editor_easy_v8212.py",
"test_editor_ux_v8211.py"
],
"status": "passed",
"seconds": 3.05,
"summary": "...... [100%]\n6 passed in 0.22s\n\n",
"passed_count": 6
},
{
"batch": 5,
"files": [
"test_enterprise.py",
"test_enterprise_v7.py"
],
"status": "passed",
"seconds": 10.17,
"summary": "................ [100%]\n16 passed in 5.55s\n\n",
"passed_count": 16
},
{
"batch": 6,
"files": [
"test_factory.py",
"test_factory_v2.py"
],
"status": "passed",
"seconds": 13.12,
"summary": "........................ [100%]\n24 passed in 10.09s\n\n",
"passed_count": 24
},
{
"batch": 7,
"files": [
"test_mobile_tabs_v8213.py",
"test_multilingual_v815.py"
],
"status": "passed",
"seconds": 8.68,
"summary": ".................... [100%]\n20 passed in 5.45s\n\n",
"passed_count": 20
},
{
"batch": 8,
"files": [
"test_nested_v823.py",
"test_p0_71.py"
],
"status": "passed",
"seconds": 5.08,
"summary": "........ [100%]\n8 passed in 1.77s\n\n",
"passed_count": 8
},
{
"batch": 9,
"files": [
"test_p0_backup.py",
"test_p0_p4_completion_v88.py"
],
"status": "passed",
"seconds": 6.58,
"summary": "................... [100%]\n19 passed in 3.42s\n\n",
"passed_count": 19
},
{
"batch": 10,
"files": [
"test_p0_p4_completion_v89.py",
"test_p1_platform.py"
],
"status": "passed",
"seconds": 19.25,
"summary": ".............. [100%]\n14 passed in 13.41s\n\n",
"passed_count": 14
},
{
"batch": 11,
"files": [
"test_production_v816.py",
"test_professional_ui_v811.py"
],
"status": "passed",
"seconds": 7.05,
"summary": "............... [100%]\n15 passed in 3.26s\n\n",
"passed_count": 15
},
{
"batch": 12,
"files": [
"test_regression_runner_v817.py",
"test_release_native_v814.py"
],
"status": "passed",
"seconds": 4.71,
"summary": "........... [100%]\n11 passed in 1.87s\n\n",
"passed_count": 11
},
{
"batch": 13,
"files": [
"test_release_reviews_v7.py",
"test_release_v813.py"
],
"status": "passed",
"seconds": 6.25,
"summary": ".............. [100%]\n14 passed in 3.24s\n\n",
"passed_count": 14
},
{
"batch": 14,
"files": [
"test_site_design_v87.py",
"test_siteforge_v817_audit.py"
],
"status": "passed",
"seconds": 8.13,
"summary": ".................................... [100%]\n36 passed in 5.16s\n\n",
"passed_count": 36
},
{
"batch": 15,
"files": [
"test_studio_v86.py",
"test_theme_pro_v3.py"
],
"status": "passed",
"seconds": 11.6,
"summary": "............... [100%]\n15 passed in 8.73s\n\n",
"passed_count": 15
},
{
"batch": 16,
"files": [
"test_v818_pg_recovery.py",
"test_v818_sqlite_pg_transfer.py"
],
"status": "passed",
"seconds": 3.43,
"summary": "........... [100%]\n11 passed in 0.90s\n\n",
"passed_count": 11
},
{
"batch": 17,
"files": [
"test_v821_editor_history_and_mapping.py",
"test_v822_canvas.py"
],
"status": "passed",
"seconds": 5.54,
"summary": "........ [100%]\n8 passed in 2.63s\n\n",
"passed_count": 8
},
{
"batch": 18,
"files": [
"test_v825_shared_components.py",
"test_v826_global_design.py"
],
"status": "passed",
"seconds": 9.25,
"summary": "................ [100%]\n16 passed in 6.53s\n\n",
"passed_count": 16
},
{
"batch": 19,
"files": [
"test_v827_guided_workspace.py",
"test_v828_launch_center.py"
],
"status": "passed",
"seconds": 4.57,
"summary": "....... [100%]\n7 passed in 2.02s\n\n",
"passed_count": 7
},
{
"batch": 20,
"files": [
"test_v8_art_installer.py",
"test_v8_workflows.py"
],
"status": "passed",
"seconds": 5.15,
"summary": ".............. [100%]\n14 passed in 2.25s\n\n",
"passed_count": 14
},
{
"batch": 21,
"files": [
"test_wordpress_baseline.py",
"test_worker_queue_v6.py"
],
"status": "passed",
"seconds": 13.36,
"summary": "............ [100%]\n12 passed in 10.27s\n\n",
"passed_count": 12
},
{
"batch": 22,
"files": [
"test_workspace_v810.py",
"test_workspace_v812.py"
],
"status": "failed",
"seconds": 9.11,
"summary": "</div></form></dialog>\\n</body></html>\\n'\n + where '<!doctype html>\\n<html lang=\"zh-CN\"><head><meta charset=\"utf-8\"><meta name=\"viewport\" content=\"width=device-width,ini...-muted\">取消</button><button type=\"submit\" class=\"btn btn-primary\">保存内容</button></div></form></dialog>\\n</body></html>\\n' = <Response [200 OK]>.text\n1 failed, 12 passed in 3.36s\n\n",
"passed_count": 12
},
{
"batch": 23,
"files": [
"test_wp_complex_v820.py",
"test_wp_migration_v81.py"
],
"status": "passed",
"seconds": 5.91,
"summary": "...................... [100%]\n22 passed in 2.82s\n\n",
"passed_count": 22
},
{
"batch": 24,
"files": [
"test_wp_migration_v82.py",
"test_wp_migration_v83.py"
],
"status": "passed",
"seconds": 8.14,
"summary": ".................... [100%]\n20 passed in 5.41s\n\n",
"passed_count": 20
}
]
}
@@ -0,0 +1,6 @@
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SiteForge V8.28 集成验收</title><style>
*{box-sizing:border-box}body{margin:0;background:#f6f8fb;color:#21324a;font-family:system-ui,'Microsoft YaHei',sans-serif;font-size:14px;line-height:1.7}main{max-width:1050px;margin:auto;padding:48px 24px}h1{font-size:31px}p{color:#65758d}header,section{background:white;border:1px solid #e0e8f2;border-radius:15px;padding:25px;margin:16px 0}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.stat{border:1px solid #e5eaf1;padding:20px;border-radius:12px}.stat strong{display:block;font-size:29px;color:#255d9d}table{width:100%;border-collapse:collapse;font-size:12px}th,td{padding:12px 10px;text-align:left;border-bottom:1px solid #edf1f6;vertical-align:top}th{background:#f8fafc}.table-wrap{overflow-x:auto}code{background:#f2f5fa;padding:2px 5px;border-radius:4px}a{color:#245ac6}@media(max-width:650px){.stats{grid-template-columns:1fr}main{padding:20px 12px}h1{font-size:24px}}</style></head><body><main><header><small>SITEFORGE / V8.28.0-dev.1</small><h1>新手友好上线中心 · 集成验收</h1><p>结论:历史回归全部验证通过(含一次修正旧版断言后的独立复测)。本报告仅说明当前隔离环境测试;不代表生产上线完成。</p></header>
<section class="stats"><div class="stat"><strong>383</strong><span>Python 用例通过</span></div><div class="stat"><strong>24/24</strong><span>最终验证批次</span></div><div class="stat"><strong>0</strong><span>尚未关闭的失败/超时批次</span></div></section>
<section><h2>回归差异说明</h2><p>初次分组回归第 22 批中,V8.10 旧测试仍以“构建与交付”为固定导航名称,产生 1 项断言失败;按 V8.28 已确认的新菜单“生成与预览 / 检查并上线”更新测试后,第 22 批独立复测 13 项全部通过。最初失败日志保留,不将其隐藏为初次通过。</p></section><section><h2>本版开发改动</h2><p>侧边菜单统一可点击;新增“检查并上线”六步操作中心;修正审批与发布前检查的顺序;上线版本选择、人工预览确认、审批状态、发布条件、部署任务与外网核验有清晰区分;同一版重复提交审批和部署有防护;移动端 390px 适配。</p><p>原有数据结构、登录 CSRF、角色、发布审批和远程 Worker 协议均继续保留。</p></section>
<section><h2>验证边界</h2><table><tbody><tr><td>HTTP + Worker 构建、ZIP 与预览</td><td>通过,隔离 SQLite</td></tr><tr><td>Chromium 后台 UI 流程</td><td>通过,使用模拟接口、无真实部署</td></tr><tr><td>JavaScript 专项及历史测试</td><td>详见 Node.js 测试日志</td></tr><tr><td>Art Design Pro 官方工程 pnpm build</td><td>尚未验证</td></tr><tr><td>生产 PostgreSQL、Redis、多 Worker</td><td>尚未验证</td></tr><tr><td>真实 HTTPS/SFTP/S3 发布、回滚、DNS、CDN</td><td>尚未验证</td></tr></tbody></table></section>
<section><h2>分批回归详情</h2><div class="table-wrap"><table><thead><tr><th>批次</th><th>模块</th><th>状态</th><th>通过用例</th><th>耗时</th></tr></thead><tbody><tr><td>1</td><td>test_commercial_v5.py, test_connectors_v84.py</td><td>passed</td><td>20</td><td>7.5s</td></tr><tr><td>2</td><td>test_connectors_v85.py, test_console_v819.py</td><td>passed</td><td>23</td><td>7.8s</td></tr><tr><td>3</td><td>test_core_v4.py, test_deep_nested_v824.py</td><td>passed</td><td>19</td><td>9.5s</td></tr><tr><td>4</td><td>test_editor_easy_v8212.py, test_editor_ux_v8211.py</td><td>passed</td><td>6</td><td>3.0s</td></tr><tr><td>5</td><td>test_enterprise.py, test_enterprise_v7.py</td><td>passed</td><td>16</td><td>10.2s</td></tr><tr><td>6</td><td>test_factory.py, test_factory_v2.py</td><td>passed</td><td>24</td><td>13.1s</td></tr><tr><td>7</td><td>test_mobile_tabs_v8213.py, test_multilingual_v815.py</td><td>passed</td><td>20</td><td>8.7s</td></tr><tr><td>8</td><td>test_nested_v823.py, test_p0_71.py</td><td>passed</td><td>8</td><td>5.1s</td></tr><tr><td>9</td><td>test_p0_backup.py, test_p0_p4_completion_v88.py</td><td>passed</td><td>19</td><td>6.6s</td></tr><tr><td>10</td><td>test_p0_p4_completion_v89.py, test_p1_platform.py</td><td>passed</td><td>14</td><td>19.2s</td></tr><tr><td>11</td><td>test_production_v816.py, test_professional_ui_v811.py</td><td>passed</td><td>15</td><td>7.0s</td></tr><tr><td>12</td><td>test_regression_runner_v817.py, test_release_native_v814.py</td><td>passed</td><td>11</td><td>4.7s</td></tr><tr><td>13</td><td>test_release_reviews_v7.py, test_release_v813.py</td><td>passed</td><td>14</td><td>6.2s</td></tr><tr><td>14</td><td>test_site_design_v87.py, test_siteforge_v817_audit.py</td><td>passed</td><td>36</td><td>8.1s</td></tr><tr><td>15</td><td>test_studio_v86.py, test_theme_pro_v3.py</td><td>passed</td><td>15</td><td>11.6s</td></tr><tr><td>16</td><td>test_v818_pg_recovery.py, test_v818_sqlite_pg_transfer.py</td><td>passed</td><td>11</td><td>3.4s</td></tr><tr><td>17</td><td>test_v821_editor_history_and_mapping.py, test_v822_canvas.py</td><td>passed</td><td>8</td><td>5.5s</td></tr><tr><td>18</td><td>test_v825_shared_components.py, test_v826_global_design.py</td><td>passed</td><td>16</td><td>9.2s</td></tr><tr><td>19</td><td>test_v827_guided_workspace.py, test_v828_launch_center.py</td><td>passed</td><td>7</td><td>4.6s</td></tr><tr><td>20</td><td>test_v8_art_installer.py, test_v8_workflows.py</td><td>passed</td><td>14</td><td>5.2s</td></tr><tr><td>21</td><td>test_wordpress_baseline.py, test_worker_queue_v6.py</td><td>passed</td><td>12</td><td>13.4s</td></tr><tr><td>22</td><td>test_workspace_v810.py, test_workspace_v812.py</td><td>failed</td><td>12</td><td>9.1s</td></tr><tr><td>23</td><td>test_wp_complex_v820.py, test_wp_migration_v81.py</td><td>passed</td><td>22</td><td>5.9s</td></tr><tr><td>24</td><td>test_wp_migration_v82.py, test_wp_migration_v83.py</td><td>passed</td><td>20</td><td>8.1s</td></tr></tbody></table></div></section><section><h2>交付材料</h2><p><code>docs/V8_28_GUIDED_LAUNCH_CENTER.md</code>、<code>scripts/browser_launch_v828.py</code>、<code>scripts/regression_v828.py</code>、<code>tests_js/workspace_launch_v828.test.cjs</code> 和 HTML 离线演示。</p></section></main></body></html>
+11
View File
@@ -0,0 +1,11 @@
# SiteForge V8.28 集成验收
- Python 模块:48
- 最终验证批次:24/24 通过(第 22 批旧断言更新后复测)
- 测试用例通过:383
- 初次运行失败批次:1;最终未关闭批次:0
- Chromium 模拟接口工作台:通过
- HTTP + Worker 隔离构建:通过
- 正式 PostgreSQL/Redis/Art Design Pro 编译/远程部署:未实测
本结果不可替代生产验收。
Binary file not shown.

After

Width:  |  Height:  |  Size: 249 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 198 KiB

+8
View File
@@ -0,0 +1,8 @@
{
"status": "passed",
"browser": "Chromium, route-mocked real editor assets",
"desktop": "palette/theme/style/undo",
"mobile": "390px theme dialog, no horizontal overflow",
"page_errors": [],
"api_calls": []
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

+266
View File
@@ -0,0 +1,266 @@
{
"version": "8.31.0-dev.1",
"generated_utc": "2026-10-23T09:55:03.499592+00:00",
"groups": [
{
"batch": 1,
"files": [
"test_commercial_v5.py",
"test_connectors_v84.py"
],
"status": "passed",
"seconds": 5.29,
"summary": ".................... [100%]\n20 passed in 2.87s\n\n"
},
{
"batch": 2,
"files": [
"test_connectors_v85.py",
"test_console_v819.py"
],
"status": "passed",
"seconds": 4.65,
"summary": "....................... [100%]\n23 passed in 2.21s\n\n"
},
{
"batch": 3,
"files": [
"test_core_v4.py",
"test_deep_nested_v824.py"
],
"status": "passed",
"seconds": 5.69,
"summary": "................... [100%]\n19 passed in 3.32s\n\n"
},
{
"batch": 4,
"files": [
"test_editor_easy_v8212.py",
"test_editor_ux_v8211.py"
],
"status": "passed",
"seconds": 1.88,
"summary": "...... [100%]\n6 passed in 0.11s\n\n"
},
{
"batch": 5,
"files": [
"test_enterprise.py",
"test_enterprise_v7.py"
],
"status": "passed",
"seconds": 4.75,
"summary": "................ [100%]\n16 passed in 2.25s\n\n"
},
{
"batch": 6,
"files": [
"test_factory.py",
"test_factory_v2.py"
],
"status": "passed",
"seconds": 8.21,
"summary": "........................ [100%]\n24 passed in 5.72s\n\n"
},
{
"batch": 7,
"files": [
"test_mobile_tabs_v8213.py",
"test_multilingual_v815.py"
],
"status": "passed",
"seconds": 5.45,
"summary": ".................... [100%]\n20 passed in 3.16s\n\n"
},
{
"batch": 8,
"files": [
"test_nested_v823.py",
"test_p0_71.py"
],
"status": "passed",
"seconds": 3.26,
"summary": "........ [100%]\n8 passed in 0.97s\n\n"
},
{
"batch": 9,
"files": [
"test_p0_backup.py",
"test_p0_p4_completion_v88.py"
],
"status": "passed",
"seconds": 4.39,
"summary": "................... [100%]\n19 passed in 1.96s\n\n"
},
{
"batch": 10,
"files": [
"test_p0_p4_completion_v89.py",
"test_p1_platform.py"
],
"status": "passed",
"seconds": 7.3,
"summary": ".............. [100%]\n14 passed in 4.72s\n\n"
},
{
"batch": 11,
"files": [
"test_production_v816.py",
"test_professional_ui_v811.py"
],
"status": "passed",
"seconds": 3.74,
"summary": "............... [100%]\n15 passed in 1.29s\n\n"
},
{
"batch": 12,
"files": [
"test_regression_runner_v817.py",
"test_release_native_v814.py"
],
"status": "passed",
"seconds": 3.58,
"summary": "........... [100%]\n11 passed in 1.40s\n\n"
},
{
"batch": 13,
"files": [
"test_release_reviews_v7.py",
"test_release_v813.py"
],
"status": "passed",
"seconds": 3.93,
"summary": ".............. [100%]\n14 passed in 1.51s\n\n"
},
{
"batch": 14,
"files": [
"test_site_design_v87.py",
"test_siteforge_v817_audit.py"
],
"status": "passed",
"seconds": 5.57,
"summary": ".................................... [100%]\n36 passed in 3.19s\n\n"
},
{
"batch": 15,
"files": [
"test_studio_v86.py",
"test_theme_pro_v3.py"
],
"status": "passed",
"seconds": 8.06,
"summary": "............... [100%]\n15 passed in 5.58s\n\n"
},
{
"batch": 16,
"files": [
"test_v818_pg_recovery.py",
"test_v818_sqlite_pg_transfer.py"
],
"status": "passed",
"seconds": 2.91,
"summary": "........... [100%]\n11 passed in 0.60s\n\n"
},
{
"batch": 17,
"files": [
"test_v821_editor_history_and_mapping.py",
"test_v822_canvas.py"
],
"status": "passed",
"seconds": 3.92,
"summary": "........ [100%]\n8 passed in 1.43s\n\n"
},
{
"batch": 18,
"files": [
"test_v825_shared_components.py",
"test_v826_global_design.py"
],
"status": "passed",
"seconds": 5.74,
"summary": "................ [100%]\n16 passed in 3.04s\n\n"
},
{
"batch": 19,
"files": [
"test_v827_guided_workspace.py",
"test_v828_launch_center.py"
],
"status": "passed",
"seconds": 4.19,
"summary": "....... [100%]\n7 passed in 1.57s\n\n"
},
{
"batch": 20,
"files": [
"test_v829_theme_studio.py",
"test_v830_real_pages.py"
],
"status": "passed",
"seconds": 10.91,
"summary": "....... [100%]\n7 passed in 7.82s\n\n"
},
{
"batch": 21,
"files": [
"test_v831_automotive_ref.py",
"test_v8_art_installer.py"
],
"status": "passed",
"seconds": 4.93,
"summary": "..... [100%]\n5 passed in 2.11s\n\n"
},
{
"batch": 22,
"files": [
"test_v8_workflows.py",
"test_wordpress_baseline.py"
],
"status": "passed",
"seconds": 3.63,
"summary": "................... [100%]\n19 passed in 1.26s\n\n"
},
{
"batch": 23,
"files": [
"test_worker_queue_v6.py",
"test_workspace_v810.py"
],
"status": "passed",
"seconds": 7.34,
"summary": ".......... [100%]\n10 passed in 4.72s\n\n"
},
{
"batch": 24,
"files": [
"test_workspace_v812.py",
"test_wp_complex_v820.py"
],
"status": "passed",
"seconds": 4.16,
"summary": "..................... [100%]\n21 passed in 1.63s\n\n"
},
{
"batch": 25,
"files": [
"test_wp_migration_v81.py",
"test_wp_migration_v82.py"
],
"status": "passed",
"seconds": 6.4,
"summary": ".................... [100%]\n20 passed in 3.87s\n\n"
},
{
"batch": 26,
"files": [
"test_wp_migration_v83.py"
],
"status": "passed",
"seconds": 3.68,
"summary": ".......... [100%]\n10 passed in 1.39s\n\n"
}
],
"all_passed": true
}
@@ -0,0 +1 @@
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SiteForge V8.29 · 主题与编辑器验收</title><style>*{box-sizing:border-box}body{margin:0;background:#f5f7fa;color:#233246;font:15px/1.65 system-ui,'Microsoft YaHei',sans-serif}main{max-width:1030px;margin:auto;padding:28px 18px 55px}section,header{background:white;border:1px solid #e2e9f0;border-radius:15px;padding:20px 24px;margin:15px 0}h1{font-size:26px;margin:7px 0}h2{font-size:18px}p{color:#5f7288}.meta{font-size:12px;color:#69819a}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.stat{border:1px solid #e1e9f1;padding:15px;border-radius:10px}.stat b{font-size:27px;display:block;color:#257c64}.stat small{color:#6c7b8c}a{color:#2464b8}.screens{display:grid;grid-template-columns:2fr 1fr;gap:15px}.screens img{max-width:100%;border:1px solid #e1e6ed;border-radius:10px}table{width:100%;border-collapse:collapse}th,td{border-bottom:1px solid #e7edf3;text-align:left;padding:7px 10px}th{background:#f8fafc}details{margin-top:15px}summary{cursor:pointer;font-weight:650}code{background:#f2f5f7;border-radius:5px;padding:2px 5px}@media(max-width:650px){main{padding:12px}.screens{grid-template-columns:1fr}.stats{grid-template-columns:1fr 1fr}section,header{padding:15px}h1{font-size:22px}}</style></head><body><main><header><div class="meta">SITEFORGE ENTERPRISE / V8.29.0-dev.1 · 开发集成版</div><h1>主题与可视化编辑器 · 集成验收</h1><p>已修改 V8.28 完整源码;本轮主要优化四套主题外观、主题安全比较、区块分类搜索与移动端编辑界面。</p></header><section><div class="stats"><div class="stat"><b>387</b><small>Python 用例通过</small></div><div class="stat"><b>25/25</b><small>回归批次通过</small></div><div class="stat"><b>39</b><small>Node.js 用例通过</small></div></div><p><b>HTTP + Worker:</b>通过;<b>Chromium 隔离交互:</b>1440px + 390px 通过。</p></section><section><h2>实际界面截图</h2><div class="screens"><figure><img alt="编辑器桌面浏览器截图" src="../v829-browser/v829-studio-desktop.png"><figcaption>实际编辑器资源 + API 模拟,桌面布局</figcaption></figure><figure><img alt="主题比较手机布局截图" src="../v829-browser/v829-studio-phone.png"><figcaption>主题比较弹窗,390px 手机布局</figcaption></figure></div><p><a href="../../examples/V8_29_主题与可视化编辑_离线操作演示.html">打开离线操作演示(模拟数据)</a></p></section><section><h2>功能验收</h2><p>四套主题 v1.2.0 / v1.1.0 均保留并可构建;六类主题示例 API 能正常生成页面;编辑器操作入口、组件搜索、配色预设、撤销/重做、手机顶栏均经过相应测试。</p><details><summary>查看 25 批 Python 回归明细</summary><table><thead><tr><th>批次</th><th>测试项数</th><th>状态</th></tr></thead><tbody><tr><td>1</td><td>20</td><td>通过</td></tr><tr><td>2</td><td>23</td><td>通过</td></tr><tr><td>3</td><td>19</td><td>通过</td></tr><tr><td>4</td><td>6</td><td>通过</td></tr><tr><td>5</td><td>16</td><td>通过</td></tr><tr><td>6</td><td>24</td><td>通过</td></tr><tr><td>7</td><td>20</td><td>通过</td></tr><tr><td>8</td><td>8</td><td>通过</td></tr><tr><td>9</td><td>19</td><td>通过</td></tr><tr><td>10</td><td>14</td><td>通过</td></tr><tr><td>11</td><td>15</td><td>通过</td></tr><tr><td>12</td><td>11</td><td>通过</td></tr><tr><td>13</td><td>14</td><td>通过</td></tr><tr><td>14</td><td>36</td><td>通过</td></tr><tr><td>15</td><td>15</td><td>通过</td></tr><tr><td>16</td><td>11</td><td>通过</td></tr><tr><td>17</td><td>8</td><td>通过</td></tr><tr><td>18</td><td>16</td><td>通过</td></tr><tr><td>19</td><td>7</td><td>通过</td></tr><tr><td>20</td><td>5</td><td>通过</td></tr><tr><td>21</td><td>19</td><td>通过</td></tr><tr><td>22</td><td>10</td><td>通过</td></tr><tr><td>23</td><td>21</td><td>通过</td></tr><tr><td>24</td><td>20</td><td>通过</td></tr><tr><td>25</td><td>10</td><td>通过</td></tr></tbody></table></details></section><section><h2>仍需真实生产环境验收</h2><p>Art Design Pro 官方工程构建、真实登录后台完整浏览器 E2E、PostgreSQL/Redis 多 Worker、远程正式发布、回滚和恢复演练仍未完成。当前浏览器环境阻止访问 localhost,隔离画布验收不能代替生产实机验收。</p><p>已有网站主题固定为 v1.1.0 时不会自动切换到 v1.2.0。升级主题需要明确操作并人工检查页面。</p></section></main></body></html>
+54
View File
@@ -0,0 +1,54 @@
{
"version": "8.29.0-dev.1",
"completed_utc": "2026-10-23T09:13:21.447809+00:00",
"python": {
"batches": 25,
"passed_cases": 387,
"all_batches_passed": true,
"cases_each_batch": [
20,
23,
19,
6,
16,
24,
20,
8,
19,
14,
15,
11,
14,
36,
15,
11,
8,
16,
7,
5,
19,
10,
21,
20,
10
]
},
"node": {
"passed": 39
},
"http_worker": "passed (local isolated)",
"browser": {
"route_mocked_actual_assets": "passed",
"widths": [
"1440",
"390"
],
"scripts_errors": 0,
"real_localhost_login": "not verified (blocked by execution policy)"
},
"production": {
"art_design_pro_official_build": "not verified",
"postgres_redis_multiworker": "not verified",
"remote_publish_and_rollback": "not verified"
}
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 1,
"modules": [
"test_commercial_v5.py",
"test_connectors_v84.py"
],
"status": "passed",
"elapsed": 5.27,
"summary": ".................... [100%]\n20 passed in 2.82s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 2,
"modules": [
"test_connectors_v85.py",
"test_console_v819.py"
],
"status": "passed",
"elapsed": 4.45,
"summary": "....................... [100%]\n23 passed in 2.11s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 3,
"modules": [
"test_core_v4.py",
"test_deep_nested_v824.py"
],
"status": "passed",
"elapsed": 5.63,
"summary": "................... [100%]\n19 passed in 3.23s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 4,
"modules": [
"test_editor_easy_v8212.py",
"test_editor_ux_v8211.py"
],
"status": "passed",
"elapsed": 1.9,
"summary": "...... [100%]\n6 passed in 0.13s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 5,
"modules": [
"test_enterprise.py",
"test_enterprise_v7.py"
],
"status": "passed",
"elapsed": 4.6,
"summary": "................ [100%]\n16 passed in 2.26s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 6,
"modules": [
"test_factory.py",
"test_factory_v2.py"
],
"status": "passed",
"elapsed": 7.86,
"summary": "........................ [100%]\n24 passed in 5.43s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 7,
"modules": [
"test_mobile_tabs_v8213.py",
"test_multilingual_v815.py"
],
"status": "passed",
"elapsed": 5.88,
"summary": ".................... [100%]\n20 passed in 3.32s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 8,
"modules": [
"test_nested_v823.py",
"test_p0_71.py"
],
"status": "passed",
"elapsed": 3.17,
"summary": "........ [100%]\n8 passed in 0.98s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 9,
"modules": [
"test_p0_backup.py",
"test_p0_p4_completion_v88.py"
],
"status": "passed",
"elapsed": 4.35,
"summary": "................... [100%]\n19 passed in 2.07s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 10,
"modules": [
"test_p0_p4_completion_v89.py",
"test_p1_platform.py"
],
"status": "passed",
"elapsed": 5.73,
"summary": ".............. [100%]\n14 passed in 3.54s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 11,
"modules": [
"test_production_v816.py",
"test_professional_ui_v811.py"
],
"status": "passed",
"elapsed": 3.44,
"summary": "............... [100%]\n15 passed in 1.25s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 12,
"modules": [
"test_regression_runner_v817.py",
"test_release_native_v814.py"
],
"status": "passed",
"elapsed": 3.27,
"summary": "........... [100%]\n11 passed in 1.40s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 13,
"modules": [
"test_release_reviews_v7.py",
"test_release_v813.py"
],
"status": "passed",
"elapsed": 3.68,
"summary": ".............. [100%]\n14 passed in 1.38s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 14,
"modules": [
"test_site_design_v87.py",
"test_siteforge_v817_audit.py"
],
"status": "passed",
"elapsed": 5.41,
"summary": ".................................... [100%]\n36 passed in 3.09s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 15,
"modules": [
"test_studio_v86.py",
"test_theme_pro_v3.py"
],
"status": "passed",
"elapsed": 7.58,
"summary": "............... [100%]\n15 passed in 5.18s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 16,
"modules": [
"test_v818_pg_recovery.py",
"test_v818_sqlite_pg_transfer.py"
],
"status": "passed",
"elapsed": 2.97,
"summary": "........... [100%]\n11 passed in 0.52s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 17,
"modules": [
"test_v821_editor_history_and_mapping.py",
"test_v822_canvas.py"
],
"status": "passed",
"elapsed": 3.86,
"summary": "........ [100%]\n8 passed in 1.33s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 18,
"modules": [
"test_v825_shared_components.py",
"test_v826_global_design.py"
],
"status": "passed",
"elapsed": 5.28,
"summary": "................ [100%]\n16 passed in 2.66s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 19,
"modules": [
"test_v827_guided_workspace.py",
"test_v828_launch_center.py"
],
"status": "passed",
"elapsed": 3.81,
"summary": "....... [100%]\n7 passed in 1.28s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 20,
"modules": [
"test_v829_theme_studio.py",
"test_v830_real_pages.py"
],
"status": "passed",
"elapsed": 9.96,
"summary": "....... [100%]\n7 passed in 7.41s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 21,
"modules": [
"test_v8_art_installer.py",
"test_v8_workflows.py"
],
"status": "passed",
"elapsed": 3.75,
"summary": ".............. [100%]\n14 passed in 1.29s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 22,
"modules": [
"test_wordpress_baseline.py",
"test_worker_queue_v6.py"
],
"status": "passed",
"elapsed": 6.98,
"summary": "............ [100%]\n12 passed in 4.43s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 23,
"modules": [
"test_workspace_v810.py",
"test_workspace_v812.py"
],
"status": "passed",
"elapsed": 4.08,
"summary": "............. [100%]\n13 passed in 1.65s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 24,
"modules": [
"test_wp_complex_v820.py",
"test_wp_migration_v81.py"
],
"status": "passed",
"elapsed": 4.22,
"summary": "...................... [100%]\n22 passed in 1.78s\n\n"
}
+10
View File
@@ -0,0 +1,10 @@
{
"batch": 25,
"modules": [
"test_wp_migration_v82.py",
"test_wp_migration_v83.py"
],
"status": "passed",
"elapsed": 5.99,
"summary": ".................... [100%]\n20 passed in 3.61s\n\n"
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 872 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 553 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 522 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 253 KiB

+281
View File
@@ -0,0 +1,281 @@
{
"checks_count": 30,
"overflow_or_semantic_issues": [],
"script_errors": [],
"mega_opened": true,
"catalog_filter_matches": 1,
"drawer_opened": true,
"drawer_escaped": true,
"checks": [
{
"viewport": 375,
"htmlWidth": 375,
"bodyWidth": 375,
"h1": 1,
"bodyHeight": 6264,
"page": "首页",
"width": 375
},
{
"viewport": 390,
"htmlWidth": 390,
"bodyWidth": 390,
"h1": 1,
"bodyHeight": 6295,
"page": "首页",
"width": 390
},
{
"viewport": 430,
"htmlWidth": 430,
"bodyWidth": 430,
"h1": 1,
"bodyHeight": 6405,
"page": "首页",
"width": 430
},
{
"viewport": 768,
"htmlWidth": 768,
"bodyWidth": 768,
"h1": 1,
"bodyHeight": 5307,
"page": "首页",
"width": 768
},
{
"viewport": 1440,
"htmlWidth": 1440,
"bodyWidth": 1440,
"h1": 1,
"bodyHeight": 4548,
"page": "首页",
"width": 1440
},
{
"viewport": 375,
"htmlWidth": 375,
"bodyWidth": 375,
"h1": 1,
"bodyHeight": 3174,
"page": "车型列表",
"width": 375
},
{
"viewport": 390,
"htmlWidth": 390,
"bodyWidth": 390,
"h1": 1,
"bodyHeight": 3196,
"page": "车型列表",
"width": 390
},
{
"viewport": 430,
"htmlWidth": 430,
"bodyWidth": 430,
"h1": 1,
"bodyHeight": 3256,
"page": "车型列表",
"width": 430
},
{
"viewport": 768,
"htmlWidth": 768,
"bodyWidth": 768,
"h1": 1,
"bodyHeight": 2861,
"page": "车型列表",
"width": 768
},
{
"viewport": 1440,
"htmlWidth": 1440,
"bodyWidth": 1440,
"h1": 1,
"bodyHeight": 2474,
"page": "车型列表",
"width": 1440
},
{
"viewport": 375,
"htmlWidth": 375,
"bodyWidth": 375,
"h1": 1,
"bodyHeight": 2701,
"page": "品牌详情",
"width": 375
},
{
"viewport": 390,
"htmlWidth": 390,
"bodyWidth": 390,
"h1": 1,
"bodyHeight": 2712,
"page": "品牌详情",
"width": 390
},
{
"viewport": 430,
"htmlWidth": 430,
"bodyWidth": 430,
"h1": 1,
"bodyHeight": 2742,
"page": "品牌详情",
"width": 430
},
{
"viewport": 768,
"htmlWidth": 768,
"bodyWidth": 768,
"h1": 1,
"bodyHeight": 2355,
"page": "品牌详情",
"width": 768
},
{
"viewport": 1440,
"htmlWidth": 1440,
"bodyWidth": 1440,
"h1": 1,
"bodyHeight": 2274,
"page": "品牌详情",
"width": 1440
},
{
"viewport": 375,
"htmlWidth": 375,
"bodyWidth": 375,
"h1": 1,
"bodyHeight": 2583,
"page": "车型详情",
"width": 375
},
{
"viewport": 390,
"htmlWidth": 390,
"bodyWidth": 390,
"h1": 1,
"bodyHeight": 2597,
"page": "车型详情",
"width": 390
},
{
"viewport": 430,
"htmlWidth": 430,
"bodyWidth": 430,
"h1": 1,
"bodyHeight": 2633,
"page": "车型详情",
"width": 430
},
{
"viewport": 768,
"htmlWidth": 768,
"bodyWidth": 768,
"h1": 1,
"bodyHeight": 2805,
"page": "车型详情",
"width": 768
},
{
"viewport": 1440,
"htmlWidth": 1440,
"bodyWidth": 1440,
"h1": 1,
"bodyHeight": 2829,
"page": "车型详情",
"width": 1440
},
{
"viewport": 375,
"htmlWidth": 375,
"bodyWidth": 375,
"h1": 1,
"bodyHeight": 4641,
"page": "公司介绍",
"width": 375
},
{
"viewport": 390,
"htmlWidth": 390,
"bodyWidth": 390,
"h1": 1,
"bodyHeight": 4699,
"page": "公司介绍",
"width": 390
},
{
"viewport": 430,
"htmlWidth": 430,
"bodyWidth": 430,
"h1": 1,
"bodyHeight": 4829,
"page": "公司介绍",
"width": 430
},
{
"viewport": 768,
"htmlWidth": 768,
"bodyWidth": 768,
"h1": 1,
"bodyHeight": 4120,
"page": "公司介绍",
"width": 768
},
{
"viewport": 1440,
"htmlWidth": 1440,
"bodyWidth": 1440,
"h1": 1,
"bodyHeight": 3449,
"page": "公司介绍",
"width": 1440
},
{
"viewport": 375,
"htmlWidth": 375,
"bodyWidth": 375,
"h1": 1,
"bodyHeight": 2143,
"page": "联系我们",
"width": 375
},
{
"viewport": 390,
"htmlWidth": 390,
"bodyWidth": 390,
"h1": 1,
"bodyHeight": 2144,
"page": "联系我们",
"width": 390
},
{
"viewport": 430,
"htmlWidth": 430,
"bodyWidth": 430,
"h1": 1,
"bodyHeight": 2148,
"page": "联系我们",
"width": 430
},
{
"viewport": 768,
"htmlWidth": 768,
"bodyWidth": 768,
"h1": 1,
"bodyHeight": 2091,
"page": "联系我们",
"width": 768
},
{
"viewport": 1440,
"htmlWidth": 1440,
"bodyWidth": 1440,
"h1": 1,
"bodyHeight": 1826,
"page": "联系我们",
"width": 1440
}
]
}
@@ -0,0 +1,9 @@
<!doctype html><html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>SiteForge V8.31.1 汽车主题验收</title><style>
body{margin:0;background:#f3f6fa;color:#162b40;font:15px/1.75 system-ui,"Microsoft Yahei",sans-serif}
main{max-width:1080px;margin:auto;padding:52px 24px}h1{font-size:35px;margin:8px 0}h2{margin-top:38px}p{color:#566b7c}.eyebrow{color:#da733b;font-weight:700;letter-spacing:2px;font-size:12px}.facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:15px;margin:28px 0}.card{background:white;padding:20px;border:1px solid #dfe7ef;border-radius:12px}.card strong{display:block;font-size:32px;color:#0d344d}table{width:100%;border-collapse:collapse;background:white}th,td{text-align:left;padding:15px;border-bottom:1px solid #edf0f3}a{color:#cb6435}img{width:100%;display:block;border-radius:11px}.warning{padding:16px 20px;border-left:3px solid #cb8a39;background:#fff}
</style></head><body><main><div class="eyebrow">V8.31.1 / AUTOMOTIVE PERFORMANCE & ICONS</div><h1>汽车主题性能及语义化图标验收</h1><p>已在 V8.31 源码基础上实际修改、构建、测试。对比采用同一套虚构站点内容的静态输出,不代表公网 Lighthouse 评分或真实车辆图片加载速度。</p>
<div class="facts"><div class="card">CSS/JS 引用数<strong>11 → 2</strong>按 HTML 解析计数</div><div class="card">CSS/JS gzip 估算<strong>27.6 → 23.3 KB</strong>不含图片、HTML</div><div class="card">浏览器页面组合<strong>10</strong>1440px 和 390px</div><div class="card">静态质量错误<strong>0</strong>四套主题示例站</div></div>
<h2>请求数与加载策略</h2><table><tr><th>检查项</th><th>汽车主题 1.4.0</th><th>汽车主题 1.4.1</th></tr><tr><td>CSS 文件请求</td><td>8</td><td>1</td></tr><tr><td>JS 文件请求</td><td>3</td><td>1</td></tr><tr><td>SVG 图标资源</td><td>未统一</td><td>本地 Sprite(1 个文件,gzip 1.1 KB)</td></tr><tr><td>首页主图</td><td>高优先级</td><td>高优先级 + 异步解码</td></tr><tr><td>车型详情主图</td><td>延迟加载</td><td>优先加载</td></tr><tr><td>产品卡片图片</td><td>延迟加载</td><td>延迟加载 + 异步解码</td></tr></table>
<h2>语义化图标</h2><p>车型、品牌、搜索、询盘、邮件、文档、新闻、企业、分类均用语义图标;方向箭头仅保留在分页和返回等有方向意义的操作。SVG 资源由本站托管,页面不需要外部图标 CDN 或图标字体。</p>
<h2>验收边界</h2><div class="warning">Python 重点回归 40 项通过;JavaScript 测试 39 项通过;HTTP + Worker 构建链路通过。隔离 Chromium 10 组页面无脚本错误、资源 404 或横向溢出。完整历史回归在第 7 批出现执行器停滞,尚不能宣称全量通过。真实 CDN、手机网络、LCP/CLS/INP 指标仍需正式部署后测量。</div>
<h2>电脑版截图</h2><img src="automotive-v8311-desktop.png" alt="汽车主题桌面浏览器演示"><h2>手机版截图</h2><img src="automotive-v8311-mobile.png" alt="汽车主题手机浏览器演示"></main></body></html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 774 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 465 KiB

+59
View File
@@ -0,0 +1,59 @@
{
"platform": "8.31.1-dev.1",
"automotive_theme": "1.4.1",
"performance": [
{
"theme": "V8.31 原汽车主题 1.4.0",
"css_requests": 8,
"js_requests": 3,
"css_js_requests": 11,
"css_js_gzip_bytes": 28227,
"assets": [
"assets/theme.css",
"assets/blocks.css",
"assets/factory.css",
"assets/pro-base.css",
"assets/pro.css",
"assets/commercial.css",
"assets/theme-overrides.css",
"assets/custom.css",
"assets/site-runtime.js",
"assets/pro.js",
"assets/auto31.js"
]
},
{
"theme": "V8.31.1 优化主题 1.4.1",
"css_requests": 1,
"js_requests": 1,
"css_js_requests": 2,
"css_js_gzip_bytes": 23890,
"assets": [
"assets/auto-compiled.css",
"assets/auto-compiled.js"
],
"icon_gzip_bytes": 1083,
"all_optimized_gzip_bytes": 24973
}
],
"browser": {
"page_width_cases": 10,
"errors": [],
"missing_resources": [],
"overflow_count": 0,
"menu_open": true,
"mobile_drawer": true
},
"test_verification": {
"python_relevant_tests": 40,
"javascript_tests": 39,
"http_worker": "passed",
"four_theme_static_build_quality_errors": 0,
"full_historical_regression": "incomplete; historical runner stalled during batch 7"
},
"limitations": [
"Real public-domain Core Web Vitals not measured",
"Demo content has no actual optimized product photography",
"Production CDN/cache response headers and infrastructure not validated"
]
}
+70
View File
@@ -0,0 +1,70 @@
[
{
"theme": "automotive-legacy",
"request_count": 11,
"css_requests": 8,
"js_requests": 3,
"compressed_transfer_bytes": 28227,
"uncompressed_bytes": 100879,
"files": {
"assets/theme.css": {
"bytes": 6361,
"gzip_bytes": 2242
},
"assets/blocks.css": {
"bytes": 7068,
"gzip_bytes": 2215
},
"assets/factory.css": {
"bytes": 5061,
"gzip_bytes": 1640
},
"assets/pro-base.css": {
"bytes": 17784,
"gzip_bytes": 4449
},
"assets/pro.css": {
"bytes": 34927,
"gzip_bytes": 8348
},
"assets/commercial.css": {
"bytes": 17269,
"gzip_bytes": 4527
},
"assets/custom.css": {
"bytes": 756,
"gzip_bytes": 382
},
"assets/site-runtime.js": {
"bytes": 3266,
"gzip_bytes": 1518
},
"assets/pro.js": {
"bytes": 8160,
"gzip_bytes": 2722
},
"assets/auto31.js": {
"bytes": 227,
"gzip_bytes": 184
}
}
},
{
"theme": "automotive",
"request_count": 2,
"css_requests": 1,
"js_requests": 1,
"compressed_transfer_bytes": 23993,
"uncompressed_bytes": 102414,
"files": {
"assets/auto-compiled.css": {
"bytes": 90755,
"gzip_bytes": 20121
},
"assets/auto-compiled.js": {
"bytes": 11659,
"gzip_bytes": 3872
}
}
}
]