upgrade: adopt V8.21.3 (V8.13→8.21.3: P5 SFTP/S3, P6 multilingual, editor overhaul, enterprise hardening)

Overlay ~150 upstream items onto our V8.12 base, preserving trade-pro
theme, registry tests, and design docs. Re-applied our patch set
(discovery/env_for/blocks.css/type-mapping/theme_color/frontend entries,
test_theme_pro_v3 mods) — all anchors survived upstream evolution.

New platform enhancement (fixes upgrade-introduced regression):
multilingual.site_locale now honors settings_json.locale, plus
PUT /api/i18n/sites/{id}/locale — standalone English sites get
<html lang='en'> under the V8.15 locale-rewrite pipeline.

compose: adopt V8.21.3 (image 8.21.3-dev.1, /api/ready probes, MySQL/S3
env) with project name pinned to siteforge-v8-10 (data volumes).

Tests: 356 passed / 11 failed — all 11 confirmed pre-existing in
pristine V8.21.3 on this host (10 upstream Windows env + our build test
now green after locale fix). Patch registry updated in plan doc.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
浅念
2026-10-23 12:31:03 +08:00
parent 257c89e159
commit 601451f22b
218 changed files with 10441 additions and 628 deletions
+274 -259
View File
@@ -1,298 +1,313 @@
# SiteForge Enterprise V8.12.0-dev.1 — 工作台流程与任务状态增强
# SiteForge Enterprise V8.21.3 — 四套内置主题手机端统一优化
> **开发集成版,尚未通过 P0–P4 全部生产验收门禁。** 完整工程在 V8.11 基线上升级;P5/多语言和 Art Design Pro 官方工程等未在本轮解决。
> **状态:开发集成版**。从 V8.21.2 完整源码升级;原站点与数据未覆盖。四套内置主题统一支持抽屉菜单,可选的 1–5 项手机底栏 Tabs 默认关闭。正式生产的域名部署、Apple/Android 真机与 Art Design Pro 官方构建仍需独立验收。
## 本轮重点
## V8.11:管理后台重新设计(本轮重点)
- `automotive` / `industrial` / `corporate` / `minimal` 手机端导航统一为右侧抽屉,菜单可包含二三级链接。
- 全站设计新增 `mobile_tabs`:默认 `enabled=false`;开启后新增、删除、排序、图标、站内/HTTPS/电话/邮箱链接均通过可视化表单配置。
- 支持底部 `菜单` Tab 打开抽屉;适配安全区域与小屏宽度。
- 保留现有网站内容、URL/SEO、设计草稿与构建/发布流程;旧配置无需迁移,默认不显示底栏。
- 手机端 4 套主题 × 首页/产品列表/产品详情/文章详情 × 375/390/430px 离线 Chromium 回归通过。
默认 `http://localhost:8787/` 现使用 **简洁工作台**,保留原有业务 API 和数据结构,不迁移数据库。
## 快速使用和测试
- **工作台**:网站数量、操作引导、最近网站;不要求初学者理解 Worker/SEO/主题 Schema。
- **我的网站**:一个地方选择所有网站;创建新站的表单只保留必要字段。
- **网站概览**:四步流程(建立网站、准备内容、完善设计、构建预览),动态提示下一步。
- **内容与页面**:页面、产品、新闻统一管理,可快捷修改文字或进入可视化设计器。
- **外观与设计**:行业主题选择与实际页面编辑;草稿/发布隔离仍由原编辑器负责。
- **导入与迁移**:默认进入带预演、复核与批次回滚的导入工作台;小文件直写保留为高级操作且必须确认。
- **构建与交付**:使用既有异步 Worker,预览、静态 ZIP、质量报告集中呈现;正式审批和远程发布保留在企业交付中心。
- **网站设置**:站点名称、域名、公司标语、Logo、类型等从设计功能中独立出来。
- **高级工具**:折叠保留原有生产控制台、任务与审批、主题预览以及历史后台 `/classic`,确保不丢功能。
新增页面在 `app/templates/workspace.html`,样式和功能逻辑在 `app/static/workspace.css`、`app/static/workspace.js`。
专业页面已经使用 V8.11 的统一导航与分组交互;Art Design Pro 官方完整工程仍未正式编译整合。
**运行前后检查**:登录、创建站点、内容编辑、主题切换、文件导入、异步构建、预览/ZIP、手机宽度侧边栏。
**注意**:新 UI 不改变业务 API 或权限模型;`/classic` 留作过渡。真实浏览器/生产 Docker 的全面实机回归仍应在目标服务器执行。
- **直观预览**:`examples/mobile-showcase/index.html`(离线主题样例,可切换四主题和四类页面)。
- **后台配置**:网站 → 可视化编辑器 → 全站页眉与页脚 → 手机底部快捷导航 Tabs。
- **专项测试**:`python -m pytest tests/test_mobile_tabs_v8213.py -q`。
- **Chromium 测试**:`python scripts/browser_mobile_v8213.py`(需要 Playwright 和 Chromium);结果写入 `reports/mobile-v8213-browser.json`。
- **HTTP 端到端**:`python scripts/http_end_to_end.py`。
- **完整技术说明**:`docs/V8_21_3_MOBILE_THEMES.md`。
---
## V8.9 已有能力(原样保留)
# SiteForge Enterprise V8.21.2 — 简洁可视化编辑器(开发集成版)
本轮优化聚焦**降低学习成本**,而不是增加技术菜单。新增三步操作指引、显眼的草稿保存和设计发布、左侧一键添加区块、右侧内容/样式/设备编辑,复杂模板与动态数据设置默认收起;中间预览可以直接点击区块选中。FAQ、轮播、画廊、优势、数字统计等条目使用逐项普通表单,**不再要求普通用户填写 JSON**。
1. **P0 离线恢复安全**:恢复前校验 ZIP 路径、内容范围和数据库完整性;同文件系统暂存目录重命名切换,保留原数据目录以便回退,失败不先覆盖旧数据库。使用 `python scripts/restore_backup.py backup.zip --data /path --confirmed-offline`(务必先停 Web/Worker),完整备份生成用 `python -m app.backup`。
2. **P2 WordPress 响应式图片**:解析 `srcset`、`data-src`、`data-srcset`、`picture/source` 和视频 poster 的外部资源引用;受限本地化后保留宽度/倍数提示及懒加载 URL,无法处理的外链进入迁移复核,绝不静默删除 CDN 引用。外部 CSS 背景图、任意复杂插件布局仍未全面迁移。
3. **P3 5000 条真实构建**:独立 SQLite 夹具 10×500 记录实际导入 5,000 条并生成超 5,000 个静态 HTML;构建器预计算品牌/分类索引,交付检查和质量审计改为流式处理,避免随内容数平方增长;正式 SEO 警告仍需清理。
4. **P4 维持现有设计器与模板**:保留跨设备列设置、页面草稿、全站设计草稿、Owner 整站套版与事务回滚;针对优化过的构建器/质量检查加入回归测试。
**验收报告与限制:** [P0–P4 V8.9 评估](docs/P0_P4_V8_9_VERIFICATION.md) | [原验收矩阵](docs/P0_P4_ACCEPTANCE_MATRIX.md)
## 启动与测试(Windows PowerShell / Docker Desktop)
```powershell
# 在解压后的项目根目录执行,首次生成 .env
# 不能直接覆写旧项目数据;务必使用新测试卷
docker run --rm -v "${PWD}:/project" -w /project python:3.12-slim python scripts/init_config.py
docker compose up -d --build
docker compose ps
```
- 简洁管理后台(默认推荐):`http://localhost:8787/`
- 旧版专业操作页:`http://localhost:8787/classic`
- 高级数据与迁移工具:`http://localhost:8787/production-v8`
- 主题中心:`http://localhost:8787/theme-gallery`
- `/api/health` 应返回平台版本 `8.10.0-dev.1` 和构建提交标识。
- 本地测试:`bash scripts/check.sh` 或 Windows PowerShell `scripts/check.ps1`。
- 独立 5000 条验收:`python scripts/pilot_5000.py --report pilot.json`(默认只验证 5,000 条导入)。有足够资源的测试机上加 `--build` 同时检查整站构建;仍需分开核查 SEO 警告。。
## 迁移及回滚注意
离线恢复在目标目录旁保留 `*.pre-restore-*` 原数据目录;恢复完成后先验证旧构建、媒体、权限和管理员登录,再确认是否可以清理原目录。请先把备份 ZIP 拷贝到 Docker 卷之外。此恢复脚本适用于 SQLite 单机数据;**不是 PostgreSQL 恢复工具**。恢复前 Web 与 Worker 必须全部停止。
## 开发验收边界
此版本未在当前环境执行 Docker Engine、GitHub Actions 云端 CI、真实授权 WordPress 全站迁移、MySQL TLS 实机、生产密钥轮换以及桌面/移动浏览器完整视觉验收。P0–P4 尚不能全部标为生产交付完成。跨域 CDN、CSS 背景资源、付费/私有 WordPress 数据及复杂 WooCommerce/Elementor 页仍需定制适配与人工复核。
- 编辑器:原 `/editor/{site_id}/{entry_id}` 路径,无数据库结构变更。
- 离线可交互预览:[`examples/Studio_V8_21_2_新手友好版交互预览.html`](examples/Studio_V8_21_2_新手友好版交互预览.html)。演示中的保存/发布不连接生产 API。
- 变更与验收:[`docs/V8_21_2_EASY_STUDIO.md`](docs/V8_21_2_EASY_STUDIO.md)。
- 仍保持原有 CSRF、权限、草稿乐观锁、审核及静态构建流程;**发布设计不等于自动部署上线**。
- 官方 Art Design Pro 工程、真实 Chromium E2E 和生产环境验收仍需独立完成;不要据此宣布正式投产。
---
## 历史功能说明(原 V8.8/之前版本,仅供追溯)
# SiteForge Enterprise V8.21.1 — Studio 可视化编辑器体验增强
# SiteForge Enterprise V8.8.0-dev.1 — P0–P4 集成增强版
> **交付状态:开发集成版,尚未通过 P0–P4 全部门禁,不应作为正式商业验收报告。**
本版延续 V8.7 的完整源码,聚焦 P4(响应式独立列布局、图片素材库、整站模板两步审核与多页原子操作),同时修复深层页面 CTA/媒体根路径问题、版本与 Compose 遗留问题。旧站迁移、数据装配、安全 HTTP、Worker、四套主题继续保留。
- **P4 设备布局**:页面中的多列区块可设置平板/手机独立列数、排序、跨度和显示隐藏;所有自定义 CSS 经过严格参数校验,并按页面作用域生成。
- **P4 模板套版**:生产控制台先预检、再暂存,最后 Owner 发布;冲突拒绝、失败回滚,同步保证数据与 SEO 不被模板业务内容覆盖。旧版直接应用 API 需显式设置开发兼容开关。
- **P4 媒体素材**:编辑器新增本站图片库选择,支持图片组件、画廊和轮播;深层页面正确使用根路径。
- **验证状态与全部遗留**:[P0–P4 验收矩阵](docs/P0_P4_ACCEPTANCE_MATRIX.md)。
- **运行**:与 V8.7 一样,首先在独立测试目录执行 `python scripts/init_config.py`(或 Docker 运行该脚本),再 `docker compose up -d --build`。不得覆盖运行中的旧版数据卷。
---
## V8.7 历史项目说明(保留升级依据)
# SiteForge Enterprise V8.7.0-dev.1 — 全站设计草稿与响应式管理
> **交付状态:开发试点版。** 本轮基于 V8.6 延续原 Web + Docker 工程,不是单独演示网站。
## V8.7 本轮实际实现
- **全站设计草稿**:`GET/PUT/DELETE /api/sites/{site}/site-design` 管理独立草稿;`POST /site-design/publish` 才更新用于正式构建的全站配置。对 `revision` 和底层设置指纹做并发冲突检查,发布记录保存在 `site_design_publications`。
- **统一页眉/页脚/导航**:支持安全的三级导航、搜索显示、顶部公告、联系 CTA、页脚标题/介绍/邮箱、页脚菜单显示选项;四套专业主题的最终 HTML 均消费同一份配置。导航只允许站内路径,严禁任意脚本、外部链接注入。
- **响应式控制**:平板与手机的区块间距、手机内容左右内边距、移动端公告和页脚导航显隐;已写入最终静态 `assets/custom.css` 和可视化编辑器预览 CSS。它是可交付的响应式参数编辑,**并非**完整独立设备画布。
- **设计令牌统一入草稿**:字体、标题缩放、版心宽度、圆角等改为全站草稿保存/发布;未经发布不会更改新构建。编辑器内可在“设计规范”和“全站页眉与页脚”面板操作。
- **关闭旧版直写绕过**:`/blueprint` 直写、旧导航直写、旧设计令牌直写及 `PATCH entry.meta` 的布局直写,在生产环境默认返回 HTTP 409。旧脚本若必须临时过渡,可显式设 `SITEFORGE_ALLOW_LEGACY_DIRECT_DESIGN_WRITE=1`;**正式生产不应启用此选项**。原后台导航表单与企业设计令牌页已改写全站草稿。
- **测试**:在现有 168 项回归基础上新增 13 项专项测试,验证四主题、草稿构建隔离、发布、设计令牌、安全输入、跨站隔离、并发拒绝、旧接口安全门禁。
### 使用方法
1. 解压后先在**独立测试环境**启动 Docker(以下为 PowerShell):
```powershell
docker run --rm -v "${PWD}:/project" -w /project python:3.12-slim python scripts/init_config.py
docker compose up -d --build
```
2. 登录 `http://localhost:8787/`,进入任意站点页面的 `/editor/{site_id}/{entry_id}` 设计器。
3. 点击 **全站页眉与页脚**,调整导航/页眉/页脚/手机与平板设置,点击 **预览草稿**,随后 **保存全站草稿**。
4. 由网站 Owner 点击 **发布全站设计**,然后触发 Worker 网站构建。现有已发布静态版本不会因保存或发布设计而被原位篡改。
5. CI 中可执行 `pytest`、Python 编译检查、`node --check`;Docker、真实浏览器和服务器发布需要独立实机验收。
### API 及兼容性
| 方法与路径 | 行为 |
|---|---|
| `GET /api/sites/{site}/site-design` | 返回已发布配置或草稿、版本、冲突状态 |
| `PUT /api/sites/{site}/site-design` | 携带 `config` 与 `expected_revision` 保存草稿 |
| `POST /api/sites/{site}/site-design/publish` | Owner 审核发布,要求版本号 |
| `DELETE /api/sites/{site}/site-design` | 删除未发布草稿 |
| `GET /api/sites/{site}/site-design/publications` | 查询最近的发布审计记录 |
| `POST /api/sites/{site}/pages/{entry}/editor-preview` | 请求体的 `site_design` 可预览未发布的整站草稿 |
### 明确未完成
- 目前并非 Figma 式自由定位编辑;完整 PC/平板/手机**独立布局**、全站模板可视化拖拽、实时跨设备视觉验收仍待开发。
- 旧版批量套版及部分内容创建接口仍可能更新布局,需在后续将所有设计变更统一纳入发布工作流;本次仅限制上述直接绕过入口。
- Art Design Pro 官方工程、复杂 CMS 无损迁移、PostgreSQL/Redis 多实例、SFTP/S3 正式发布仍未完成完整实机验收。
- 当前环境无 Docker Engine,**不能宣称** `docker compose up` 已实机通过;亦未完成 GitHub 云端 CI 和真机 Chrome 视觉回归。
---
## 上一版 V8.6 的开发记录(保留供升级追踪)
# SiteForge Enterprise V8.6.0-dev.1
> **状态:开发试点版,P4 设计器与整站模板增强。** 同一主线延续 V8.5 的认证 API、只读 MySQL、V8.4 XML/API、WordPress 迁移、四套主题、构建 Worker 和发布审批。尚未完成正式商业/生产验收。
## 这一轮新增(P4)
- **六种声明式组件**:`carousel` 图片滚动展示、`video` YouTube/Vimeo 白名单视频、`tabs` 可访问详情分组、`pricing` 服务方案、`map` 可信地图外链、`form_link` 询盘入口。都使用可信渲染器输出,不允许用户提交 JavaScript。
- **独立设计草稿**:V8.6 可视化编辑器的“保存草稿”只写入 `studio_drafts`,不会修改正式 entries 或被静态构建读取;“发布设计”才会原子写入正式页面,随后需重新构建静态网站。
- **并发保护**:每次草稿更新携带 `expected_revision`;正式页面被其他人改动后,拒绝发布,防止静默覆盖。放弃草稿会恢复正式版设计。操作支持站点权限隔离与审计。
- **整站模板兼容性**:模板带主题版本声明;新增 `/whole-site-templates/preflight` 无副作用检查,验证主题是否存在、指定版本是否可用、已安装组件、已有路径,后台预检后再应用。
- **前端操作入口**:原 `/editor/{site_id}/{entry_id}` 页面新增保存草稿、发布设计、放弃草稿;整站模板控制台在应用前执行独立兼容性检查。原 `/blueprint` 直写接口保留兼容旧系统,尚未完全禁用。
### Docker 运行
Windows PowerShell(在解压后的项目根目录):
```powershell
docker run --rm -v "${PWD}:/project" -w /project python:3.12-slim python scripts/init_config.py
docker compose up -d --build
docker compose ps
```
页面:管理台 `http://localhost:8787/`;生产控制台 `/production-v8`;主题 `/theme-gallery`;设计器从网站页面进入 `/editor/{site_id}/{entry_id}`;API 版本 `/api/health`。
首次升级必须使用**独立测试环境和数据副本**,备份 `.env`、数据库、媒体及归档。草稿表通过幂等方式初始化,未在原有生产数据库上完成实际迁移演练。
### P4 接口
| HTTP 接口 | 用途 |
|---|---|
| `GET /api/editor/blocks` | 读取组件注册表与属性契约 |
| `GET /api/sites/{site}/pages/{entry}/studio-draft` | 获取当前草稿或正式布局 |
| `GET /api/sites/{site}/pages/{entry}/studio-draft/preset?page_template=home` | 获取主题预设,不修改正式页 |
| `PUT /api/sites/{site}/pages/{entry}/studio-draft` | 保存草稿,要求 `expected_revision` |
| `POST /api/sites/{site}/pages/{entry}/studio-draft/publish` | 发布设计,需要 owner 角色和 `expected_revision` |
| `DELETE /api/sites/{site}/pages/{entry}/studio-draft` | 放弃草稿 |
| `POST /api/factory/sites/{site}/whole-site-templates/preflight` | 整站模板无副作用兼容检查 |
开发环境已经完成 **168 项本地 pytest**、全部 JavaScript 语法与版本检查,另有“草稿构建不包含未发布内容 → 发布后重新构建包含内容”的实测回归。
**未验收**:Docker Engine 实机、GitHub 云端 CI、浏览器 PC/手机端手工交互、真实客户内容视觉检查、Art Design Pro 官方工程编译、复杂 WordPress 无损迁移、PostgreSQL/Redis 多实例能力、SFTP/S3 正式发布。
详细信息见 [V8.6 验收与剩余需求](docs/V8_6_RELEASE_STATUS.md)。
---
## 历史版本功能参考(以下内容为 V8.5 及更早阶段的开发记录,不是 V8.6 最新状态)
---
## V8.4 历史能力(继续保留)
> 当前阶段:统一网站生产工厂,**P3 数据连接器第一轮(安全 XML、公开 JSON API + Worker)**。本版本是开发试点版,并非所有网站工厂需求均已实现。
## V8.4 本轮新增
- **安全 XML 导入**:`/production-v8` 可以上传 XML,选择记录节点、内容类型和字段映射,支持扁平或两级结构;使用 `defusedxml` 禁用 DTD 与外部实体,并限制最大 8 MB、1000 条记录及节点/深度上限。
- **公开 HTTPS JSON API**:设置 `url`、JSON 列表路径(例如 `data.items`)、字段映射和分页;创建后提交 Worker 后台采集,使用既有租约/取消/重试/超时机制。每页形成独立暂存批次,可以审批提交或回滚。所有采集均不自动上线。
- **进度和误差边界**:最多 50 页 × 每页 100 条,合计 5000 条;发生中断从已保存页码继续,复用已有同页批次避免重试重复写入;达到最大页数而上页满额会显示 `limit_reached`,不能视为采集完整。
- **统一后台**:新增 XML 文件上传、API 创建、采集任务、取消和进度查询操作区域,并保留 WordPress 迁移、主题和编辑器。
- **版本与 CI**:统一应用版本标记、Compose 名称、脚本和 CI 版本断言为 `8.5.0-dev.1`;**144 项本地自动化测试通过**。
[详细功能、接口、安全限制与剩余需求](docs/V8_4_RELEASE_STATUS.md)
**边界**:目前 API **只支持无需认证的公开 JSON**,不支持带密钥 API;MySQL 只读连接器、完整 Art Design Pro 编译和生产级外部发布也尚未完成。没有运行 Docker 实机或云端 CI,因此不得将该版本称为企业正式上线完成版。
---
## 既有 V8.3 迁移与建站功能(本轮保留)
> SiteForge Enterprise 统一开发主线:**WordPress 可恢复迁移 + Sitemap 完整性审计 + 有界媒体本地化 + Worker 后台采集**。
> 基于 V8.21.0-dev.1 完整源码迭代;当前版本 `8.21.1-dev.1`,属于兼容性开发集成版,未覆盖生产网站。
>
> 版本状态:开发试点候选版,不可直接对外宣称完整 WordPress 无损迁移或企业生产部署已验收。V8.1 网站、主题、编辑器、导入批次和静态构建功能均在此版本继续维护。
> **本次直接改进**:区块搜索和快捷排序、属性分类、PC/平板/手机预览、保存与预览异步竞态保护、移动端侧栏、Ctrl+S、测试工具和离线交互示例。
>
> 交付说明:[可视化编辑器优化实施与验证](docs/V8_21_1_STUDIO_UX.md) | [无需服务器的离线交互演示](examples/Studio_V8_21_1_交互预览.html) | [原始测试数据](reports/studio-ux/editor-ux-validation.json)
>
> **准确验收边界**:39 个测试模块拆分运行累计 328 项通过,HTTP+Worker 构建通过;一键回归在第七批出现停滞,真实 Chromium 因环境策略被拒绝。尚未完成正式 Art Design Pro 全工程编译或真实企业部署验收。
## 快速启动(Docker Desktop / Linux Docker)
---
项目根目录第一次初始化:
# SiteForge Enterprise V8.21.0-dev.1 — 高级编辑历史与安全数据装配
**交付性质:完整源码的开发集成版。** 基于 V8.20 继续开发,保留原有 WordPress 迁移、主题建站、P5 发布、多语言和企业运维代码。
本轮新增:
- **持久化设计版本历史**:每次页面草稿保存与发布自动创建完整快照,按网站和页面隔离,SHA-256 完整性校验,编辑权限控制;可从历史记录恢复成**新草稿**(不直接覆写线上页面)。前端编辑器新增“版本历史”操作。
- **更安全的数据装配**:字段映射支持受限的 trim、默认值、英文大小写转换、前后缀;预览生成确定性 `plan_hash`,确认导入时可携带该指纹防止过期预览;新增严格冲突拒绝模式 `abort`,现有 `skip`、`replace` 仍兼容。内容导入 UI 新增转换选择、冲突策略和预检确认。
- **质量与版本管理**:更新镜像标签、版本常量和检查入口;专项测试覆盖历史恢复、站点隔离、快照篡改阻断、过期预检及字段处理。
验收:本地按 **10 个独立分组**执行原项目全部 **38 个测试模块、325 项测试通过**;Python 编译、Node.js 语法、静态发布检查和 HTTP+Worker E2E 通过。长流程一键检查在本环境**曾偶发停滞**,因此不能把它记为完全稳定。真实 Docker、PostgreSQL/Redis、正式 Art Design Pro 工程编译及客户迁移仍未通过验收。
文档:[V8.21 实现与验收](docs/V8_21_EDITOR_AND_MAPPING.md) · [HTML 验收报告](reports/V8_21_集成验收.html) · [10 批原始日志](reports/v821_manual_verified/)
验证命令:
```bash
# PowerShell 将 `$(pwd)` 改为 `${PWD}`
docker run --rm -v "$(pwd):/project" -w /project python:3.12-slim python scripts/init_config.py
python -m pytest -q tests/test_v821_editor_history_and_mapping.py
python scripts/http_end_to_end.py
bash scripts/check.sh
```
---
# SiteForge Enterprise V8.20.0-dev.1 — 复杂 WordPress 迁移预检与兼容性增强
基于 V8.19 完整源码。本轮新增 WXR 离线兼容预检 API + 后台入口、ACF 简单 Repeater 元数据提取、CSS 背景图本地化、危险 URL 在直接导入及暂存前阻断,以及带构建路径对账的 JSON/HTML CLI 报告。
- 阅读:[`docs/V8_20_COMPLEX_WORDPRESS.md`](docs/V8_20_COMPLEX_WORDPRESS.md)
- 演示:`python scripts/wp_v820_preflight.py fixtures/v820/wordPress-complex-sample.xml --output reports/v820-demo.json`(演示数据包含故意设置的阻断项,返回码为 1)
- 回归:`bash scripts/check.sh` 或 `python scripts/regression_v820.py --batch-size 4 --report reports/v820-regression`
- HTTP 集成:`python scripts/http_end_to_end.py`
- 安全:所有离线预检不写数据库、不联网、不执行 PHP/JS 或反序列化未知 PHP 对象。
**交付状态:开发集成版。** 尚未实现 WordPress/Elementor/ACF/WooCommerce 完整 1:1 视觉或动态业务迁移;Art Design Pro 官方工程真实编译与生产 PostgreSQL/Redis/远程发布仍需现场验收。
---
# SiteForge Enterprise V8.19.0-dev.1 — 统一后台集成版
V8.19 基于 V8.18 的完整项目继续开发。新增 **后端授权菜单 `/api/console/bootstrap`**、Art Design Pro **单一导航树安装器**、Vue 工作台与内容管理、共享会话/CSRF/站点选择、官方工程安装校验,以及 HTTPS 同源反向代理示例。正式功能与限制详见 [`docs/V8_19_ART_UNIFIED_BACKEND.md`](docs/V8_19_ART_UNIFIED_BACKEND.md)。
**交付性质:开发集成版。** 本仓库含完整 SiteForge 后端和 Art 对接业务模块,**不含官方 Art Design Pro 整套前端工程**;真实官方 `pnpm build`、PC/移动端浏览器及 HTTPS 正式发布尚未验收。不得把安装器 fixture 测试等同于官方完整前端编译。历史的 PostgreSQL/Redis/多 Worker 生产门禁仍未关闭。
建议执行:
```bash
bash scripts/check.sh
python scripts/http_end_to_end.py
python scripts/install_into_art_design_pro.py /path/to/official/art-design-pro
python scripts/install_into_art_design_pro.py /path/to/official/art-design-pro --apply
python scripts/verify_art_design_pro_v819.py /path/to/official/art-design-pro
```
---
# SiteForge Enterprise V8.18.0-dev.1 — 企业底座与数据迁移安全
V8.18 基于 V8.17 完整源码继续开发。新增 PostgreSQL 专用灾备、SQLite→PG 数据迁移校验、外部发布不确定状态的安全处置、CI 集成验证。详见 [`README_V8_18.md`](README_V8_18.md) 和 [`docs/V8_18_ENTERPRISE_HARDENING.md`](docs/V8_18_ENTERPRISE_HARDENING.md)。**本版本尚未完成真实生产环境验收。**
---
# SiteForge Enterprise V8.17.0-dev.1 — 集成回归与生产验收整合版
> **状态:开发集成版;不代表生产环境验收通过。** 基于 V8.16 完整源码升级,合入 V8.17 只读审计和 WordPress URL 迁移基线工具,并改造官方回归执行器。原 ZIP 不受影响。
## V8.17 本轮已整合
- **统一回归执行器**:`scripts/regression_v817.py` 逐批运行测试(每批最多 10 个文件),每批超时默认 90 秒;超时将结束整个子进程组、留存日志,随后逐个模块隔离定位。任何超时、失败或重试后才通过,都不能算本次验收通过。
- **Windows + Linux 一致性**:`scripts/check.sh` 和 `scripts/check.ps1` 均调用该执行器。JSON、Markdown、HTML 及每批 verbose 日志保存在 `reports/`。
- **可重复 CI**:Linux CI 两轮重复测试并上传报告;新增隔离浏览器 smoke 作业,原有 PostgreSQL、Docker 质量门禁保留。CI 定义存在并不表示已经在 GitHub Actions 实际执行。
- **Chromium 测试修复**:移动端新页面复用桌面端登录上下文;默认使用 Playwright 安装的 Chromium,`SITEFORGE_CHROMIUM` 可显式指定浏览器。
- **生产验收只读工具**:`scripts/siteforge_v817_audit.py` 支持仓库、存活/就绪探针、Compose、PG SELECT 1、Redis PING、静态构建/SEO、人工发布证据校验;不会执行部署或数据库变更。
- **WordPress 路径核对**:`scripts/export_wordpress_url_baseline.py` 从授权站点导出的 WXR/Sitemap 等本地文件建立旧路径基线,再用构建目录对比。缺失路径阻断验收而不是静默改 URL。
- 本轮产品版本更新为 `8.17.0-dev.1`;Compose 镜像及已有版本断言相应升级。不存在自动升级现有部署卷的操作。
### 一键回归(隔离本地目录)
```bash
bash scripts/check.sh
python scripts/http_end_to_end.py
python scripts/siteforge_v817_audit.py --repo . --output reports/v817-audit
```
Windows PowerShell:`./scripts/check.ps1`。
若需重复运行和定位卡点:
```bash
python scripts/regression_v817.py --repeat 3 --timeout 90 --module-timeout 50 --report reports/repeated
```
### 上线门禁
正式上线之前必须在独立测试环境完成 GitHub CI 的 Docker / PG / Redis / Chromium、真实远程发布与回滚、备份恢复、业务页面与 301/canonical/hreflang 审核。**没有实测证据时这些条目均视为未验收。** `Art Design Pro` 官方完整工程并未随此源码提供,本版本没有声称已编译或安装该后台。
参阅:`docs/V8_17_ACCEPTANCE_RUNBOOK.md` 和 `docs/V8_17_INTEGRATION_RELEASE_NOTES.md`。
---
# SiteForge Enterprise V8.16.0-dev.1 — 企业部署基础与可重复验收
> **交付状态:开发集成版。** 该版本继续沿用 V8.15 全部建站、编辑、WordPress 迁移、P5 发布和 P6 多语言功能。本轮重点是修复 PostgreSQL 兼容隐患、健康探针、Worker 实例隔离和实测建站链路。**Art Design Pro 官方完整工程没有随项目提供,不能声称已集成或完成编译;真实 PostgreSQL/Redis、Docker 和公网上线仍须实机验收。**
## V8.16 本轮变更
1. **PostgreSQL 查询行适配**:`PGRow` 同时提供字典字段访问和数字索引(如 `fetchone()[0]`),修复了原队列容量检查与其他遗留语句在 PG 下类型不匹配的问题。占位符转换现在保护 SQL 注释和转义引号;DDL 分句避免破坏字符串里的分号。
2. **数据库初始化迁移**:原先仅 SQLite 执行的 `schema_registry` 迁移账本现在也在 PostgreSQL 创建和校验;重复运行可验证迁移 checksum。团队账号唯一性冲突也支持 PG 错误码 `23505`。
3. **探针分层**:`GET /api/health` 为轻量存活;新增公开 `GET /api/ready` 检查数据库查询和 `/data` 可写性,失败只返回 `503 {"status":"unavailable"}`,不会泄露数据库/文件路径。Compose 的 Web 探针改用 `/api/ready`,Worker 探针附加数据库和存储检查。
4. **Worker 心跳隔离**:支持 `SITEFORGE_WORKER_INSTANCE`,企业 PostgreSQL 模式下默认以容器主机名隔离心跳,防止两个 Worker 相互掩盖健康问题;构建队列依然以数据库锁/租约为准。
5. **集成验证**:新增 `scripts/http_end_to_end.py`,可在隔离 SQLite 中实际启动 HTTP 服务,创建网站和页面、提交任务、启动 Worker 子进程、检查 ZIP 和预览。`scripts/browser_smoke.py` 为真实 Chromium 脚本(需要浏览器允许本地 HTTP);扩展 `scripts/verify_pg_bootstrap.py` 对所有模块初始化和队列 claim/complete/cancel 的真实 PostgreSQL 验证。
6. **CI**:回归按模块分进程运行,减少历史测试共享状态造成的超时;Web 真实 HTTP 集成测试纳入测试 Job,PG 连接测试继续由 CI `postgres-smoke` Job 执行。
## 快速检查
```bash
bash scripts/check.sh
python scripts/http_end_to_end.py
# 仅在隔离的 PostgreSQL 数据库中:
SITEFORGE_DATABASE_URL='postgresql://siteforge:***@postgres:5432/siteforge_test' python scripts/verify_pg_bootstrap.py
# 可选:安装 Playwright + Chromium 后,且允许访问 localhost:
python scripts/browser_smoke.py
```
完整验收说明和未完成门禁见 [`docs/V8_16_PRODUCTION_ACCEPTANCE.md`](docs/V8_16_PRODUCTION_ACCEPTANCE.md)。**不要在生产数据库上运行 PG smoke**,不要直接把 SQLite 数据文件重定向为 PostgreSQL,也不要在没有备份/恢复演练时升级正式卷。
---
# SiteForge Enterprise V8.15.0-dev.1 — P6 多语言网站与国际 SEO
> 历史版本说明:V8.14 在 V8.13 基础上新增原生 SFTP、S3 发布适配器及 S3 发布指针读取服务,保留 P5 发布任务、不可变版本校验与历史回滚;保留四套主题、内容管理、WordPress 迁移、数据连接器、编辑器和 Worker。**SFTP/S3 已有代码及本地仿真测试,但未完成真实 Docker、远程服务器和生产域名验收,不可直接宣布生产级完成。**
## V8.15 新增:P6 多语言网站管理(开发集成版)
**请先读此段**:V8.15 在 V8.14 完整源码上新增语言组/翻译组、审核状态、前台语言切换、HTML `lang`、双向 `hreflang` 与 Sitemap `xhtml:link`。所有业务内容由用户自己翻译、审核;不会自动翻译产品规格、公司地址或 SEO 事实。
- 入口:后台首页 → 选择网站 → **多语言管理**。
- 一个 SiteForge 站点代表一个语言版本,每个语言站拥有独立的企业内容和 URL。已实现**独立域名或子域名**方案,组成员必须配置自己的 HTTPS 域名;尚不支持多个语言共用域名下的 `/en/` 子路径方案。
- 管理员创建语言组,选择默认语言;拥有两个语言站 Owner 权限的操作者可以把站点加入同一语言组。
- 按语义创建翻译内容组(如 `product:rox01`),把中文 `/products/rox/` 与英文 `/vehicle/rox/` 的**实际内容 ID** 关联。两端需要 `published` 和 `approved` 且允许索引才会输出相互指向的语言链接。
- `pending` 只允许关联内容草稿。如果后来绕过编辑器直接将 pending 内容改为 published,**构建会拒绝执行**。
- 默认语言确实有已审核对应页面时才输出 `x-default`;`noindex`、缺失、草稿或不一致 canonical 的页面不参与。
- 生成的 `sitemap.xml` 使用正确的 XHTML 命名空间和双方对称的 alternate URL;每个独立网站的 canonical 仍指向自己的正式 URL。
- UI 有可点击的语言切换条,未关联的页面不显示不存在的翻译页面入口。
- 旧站无需设置语言组,可继续按原构建方式工作;数据库迁移只新增表格。
- 本轮**没有**实现机器翻译、批量翻译工作流、子路径多语言站点、主题各栏目默认文案的完全国际化。四套现有商业主题的预设导航和空栏目提示部分仍是中文,正式英文站上线前需配置企业自己的导航和文案。
操作示例:
1. 在“我的网站”分别新建中文站和英文站,设置 `https://zh.example.com`、`https://en.example.com`。
2. 选择中文站 → 多语言管理 → 建立语言组,默认语言可选 `en`,并将当前站点登记为 `zh-CN`(若建组时,分别填写“默认语言”和“当前网站实际语言”,两者可以不同)。
3. 将英文站加入该语言组,设置 `en`;在两个站各自建立真实对应页面。
4. 创建翻译组 `about-company`,分别选中两语言的页面,状态设为“已确认”。
5. 在两个站分别执行 Worker 静态构建,检查 HTML `<html lang=...>`、`rel=alternate` 和 `sitemap.xml`;正式发布仍需要独立审批。
本轮核心代码:`app/multilingual.py`、`app/builder.py`、`app/templates/workspace.html`、`app/static/workspace.js`,专项测试 `tests/test_multilingual_v815.py`。
## V8.15 新增:P6 多语言网站管理(开发集成版)
**请先读此段**:V8.15 在 V8.14 完整源码上新增语言组/翻译组、审核状态、前台语言切换、HTML `lang`、双向 `hreflang` 与 Sitemap `xhtml:link`。所有业务内容由用户自己翻译、审核;不会自动翻译产品规格、公司地址或 SEO 事实。
- 入口:后台首页 → 选择网站 → **多语言管理**。
- 一个 SiteForge 站点代表一个语言版本,每个语言站拥有独立的企业内容和 URL。已实现**独立域名或子域名**方案,组成员必须配置自己的 HTTPS 域名;尚不支持多个语言共用域名下的 `/en/` 子路径方案。
- 管理员创建语言组,选择默认语言;拥有两个语言站 Owner 权限的操作者可以把站点加入同一语言组。
- 按语义创建翻译内容组(如 `product:rox01`),把中文 `/products/rox/` 与英文 `/vehicle/rox/` 的**实际内容 ID** 关联。两端需要 `published` 和 `approved` 且允许索引才会输出相互指向的语言链接。
- `pending` 只允许关联内容草稿。如果后来绕过编辑器直接将 pending 内容改为 published,**构建会拒绝执行**。
- 默认语言确实有已审核对应页面时才输出 `x-default`;`noindex`、缺失、草稿或不一致 canonical 的页面不参与。
- 生成的 `sitemap.xml` 使用正确的 XHTML 命名空间和双方对称的 alternate URL;每个独立网站的 canonical 仍指向自己的正式 URL。
- UI 有可点击的语言切换条,未关联的页面不显示不存在的翻译页面入口。
- 旧站无需设置语言组,可继续按原构建方式工作;数据库迁移只新增表格。
- 本轮**没有**实现机器翻译、批量翻译工作流、子路径多语言站点、主题各栏目默认文案的完全国际化。四套现有商业主题的预设导航和空栏目提示部分仍是中文,正式英文站上线前需配置企业自己的导航和文案。
操作示例:
1. 在“我的网站”分别新建中文站和英文站,设置 `https://zh.example.com`、`https://en.example.com`。
2. 选择中文站 → 多语言管理 → 建立语言组,默认语言可选 `en`,并将当前站点登记为 `zh-CN`(若建组时默认语言不是当前站实际语言,请创建后在已建组界面使用对应语言站点;管理后台的建组快捷操作默认登记所选默认语言,操作前请校正)。
3. 将英文站加入该语言组,设置 `en`;在两个站各自建立真实对应页面。
4. 创建翻译组 `about-company`,分别选中两语言的页面,状态设为“已确认”。
5. 在两个站分别执行 Worker 静态构建,检查 HTML `<html lang=...>`、`rel=alternate` 和 `sitemap.xml`;正式发布仍需要独立审批。
本轮核心代码:`app/multilingual.py`、`app/builder.py`、`app/templates/workspace.html`、`app/static/workspace.js`,专项测试 `tests/test_multilingual_v815.py`。
## 一、系统入口
- 简洁管理后台:`http://localhost:8787/`
- 「构建与交付」:构建、预览、质量检查、提交审批、远程发布及回滚
- 「高级工具」→「任务与发布审批」:审核人对不同账号提交的申请进行审批,查看任务详情
- `http://localhost:8787/api/health`:核实运行版本与构建提交
### V8.14 新增实际功能(同时保留 V8.13 发布流程)
| 流程 | 位置 | 实际行为 |
|---|---|---|
| 发布前核对 | `GET /api/production/sites/{site}/preflight/{build}` | 必须构建 complete、有 ZIP、静态质量通过、迁移复核完成、另一账号审批通过 |
| 发起远程发布 | `POST /api/production/sites/{site}/deploy` | Owner 提交到共享 Worker 队列,返回 202 + 任务 ID;不在 Web 请求中传 ZIP |
| Worker 实际上传 | `app.job_runner` + `app.release_api.run_delivery` | 暂存 ZIP、比对 SHA256、校验远程文件清单、激活线上指针、再核对公开首页 |
| 历史版本回滚 | `POST /api/production/sites/{site}/rollback` | Owner 只能回滚本站指定目标的已记录版本,后台异步执行 |
| 发布进度/历史 | `GET /api/production/sites/{site}/delivery-status` | 返回任务、发布历史及目标是否配置;不暴露 URL 凭据 |
| 远程 Agent | `app.deploy_agent:app` | 新增 `staging` / `verify` / `activate` 事务式三阶段,不覆盖已发布目录 |
共享 Worker 的取消、重试、限额、幂等键及租约机制沿用 V8.12;**远程发布依赖在目标服务器部署新版本 Agent,旧版 Agent 不支持三阶段 API**。
## V8.14 原生 SFTP / S3 发布
- `SITEFORGE_DEPLOY_STAGING_TYPE` 和 `SITEFORGE_DEPLOY_PRODUCTION_TYPE` 支持 `agent`(兼容默认)、`sftp`、`s3`。
- 原生 SFTP:Worker 使用管理员挂载的私钥与严格 known_hosts;远程服务器需要支持原子 `posix_rename`;发布指针为 `current` 符号链接。
- 原生 S3:按版本前缀不可变保存文件,使用 S3 条件更新 `current.json`;必须搭配只读指针感知网关 `app.s3_gateway:app`,不能将 S3 裸网站端点视为原子上线。
- 目标 URL、SSH 主机、桶和密钥只能由服务器配置,不能由建站人员在浏览器随意填写;Worker 执行真实上传,Web 仅提交任务。
- 详见 [`deploy/native-release/README.md`](deploy/native-release/README.md)、`compose.publish-targets.example.yaml`、`compose.s3-gateway.example.yaml`。
- **约束**:本次对 SFTP 和 S3 的测试使用模拟文件系统与模拟 S3 兼容语义,尚未在实际远程服务器或 Docker 环境验收。
## 二、Docker 安装(Windows PowerShell)
```powershell
# 解压 V8.14 后进入项目根目录。请勿直接覆盖 V8.12 的数据卷。
docker run --rm -v "${PWD}:/project" -w /project python:3.12-slim python scripts/init_config.py
docker compose up -d --build
docker compose ps
```
- 登录:`http://localhost:8787/`
- **V8.4 生产控制台**:`http://localhost:8787/production-v8`
- 主题管理:`http://localhost:8787/theme-gallery`
- 页面编辑:`http://localhost:8787/factory-studio`
- 任务中心:`http://localhost:8787/operations`
- 构建版本:`http://localhost:8787/api/health`;当前应显示 `8.5.0-dev.1`。
推荐先用独立测试域名 / Docker volume。Web 默认只监听 `127.0.0.1:8787`。如果反向代理到外网,需要设置 HTTPS 和 `SITEFORGE_COOKIE_SECURE=true`,自行配置防火墙、TLS 与可信反向代理。
**升级注意:** 不要直接覆盖 V8.1 正在运行的存储卷。先备份 `.env`、数据库、媒体和生成文件,在独立 Compose 项目中完成验收,然后安排升级与回滚。新版本表结构采用幂等的 `CREATE TABLE IF NOT EXISTS`,但并未进行真实旧数据库原地升级演练。
**PostgreSQL/Redis 测试配置**:`docker compose -f compose.enterprise.yaml up -d --build`。这只是配置与兼容层,不能视为分布式高可用验收通过。
## V8.3 新增:WordPress 关系数据与归档 URL 保真
## 三、远程发布如何配置?
- 为每次 WordPress 迁移会话采集公开 REST 分类、标签和媒体库**元数据**,分别保存页码和已采集数量。关闭页面后可以继续下一页。
- 原始 WordPress ID、分类/标签/特色图片的关联 ID 写入批次记录和关系索引;导入确认前,在已同步名称的情况下补充分类/标签字段;绝不凭空创建不存在的分类内容。
- 分类/标签来源归档 URL 纳入旧站 SEO 基线。无对应的新页面或批准重定向时,需要通过差异检查处理。
- 对缺失的标签/分类、未知特色图片、ACF 和页面构建器内容保留人工审核事项。公开 ACF 只保留有界快照,不承诺原样转换。
- 控制台按钮:选择“分类 / 标签 / 媒体库”→ “同步目录下一页”→ “目录进度”,完成后再核对媒体和 Sitemap,最后确认导入。
1. 在**接收网站的独立服务器**上部署 `compose.release-agent.yaml`,把 Agent 的 `127.0.0.1:8790` 通过受控 HTTPS 反向代理转发为固定发布域名(如 `https://deploy.example.com`)。Agent 所在服务器必须保留持久化 `releases` 卷。
2. 在接收服务器设置 `SITEFORGE_DEPLOY_SECRET_REF=file:production_release`,把强随机密钥文件仅挂载到 Agent `/run/secrets/production_release`。可通过 `compose.agent-secrets.example.yaml` 作为私有 Compose 覆盖参考。
3. 在 SiteForge 管理服务器 `.env` 中设置 `SITEFORGE_DEPLOY_PRODUCTION_URL=https://deploy.example.com` 和 `SITEFORGE_DEPLOY_PRODUCTION_SECRET_REF=file:production_release`,将**同一生产密钥**只挂载到 Worker `/run/secrets/production_release`;通过 `compose.release-secrets.example.yaml` 添加私有只读挂载。不要把密钥写进网站数据库或前端 JavaScript。
4. Staging 使用**另一套服务器及独立密钥**,不要复用生产凭据。
5. 使用 Owner 账号选择已完成的构建,执行「检查发布条件」→「提交审批」,由**另一个具有审核权限的账号**批准后选择目标提交异步发布,回到任务列表等待确认。
6. 正式域名的 DNS/CDN、静态页面反向代理、询盘服务和 HTTPS 证书需单独配置并验证。**Agent 的 `/public/{site}/` 是自身提供的内容探针,不等于你公司的域名已经自动生效。**
详细的操作与验收边界见 [V8.3 开发验收报告](docs/V8_3_RELEASE_STATUS.md)。
生产系统不应在管理后台填入任意远程 URL:仅运维人员通过可信环境配置发布目标,且 `safe_http` 禁止访问回环、内网、云元数据与 DNS 重绑定目标。
## V8.3 迁移流程与增强
### Agent 路由
1. 创建迁移会话:指定授权 WordPress 来源和最多采集条数。
2. **提交 Worker 后台采集**:一次提交到统一数据库任务队列,Worker 子进程逐页采集 WordPress REST `pages/posts`,保持每页检查点。浏览器关闭后可以继续执行。
3. 在任务中心监控扫描的排队、执行、取消、重试、超时等状态。扫描任务不会自动提交暂存内容、不会直接上线。
4. **发现 Sitemap**:单独读取 WordPress `wp-sitemap.xml`;支持 `sitemapindex` 嵌套与有界 gzip XML,记录未从 REST 采集到的 URL。若使用 Yoast 或 RankMath 自定义 Sitemap,可以通过 API 指定同源 URL。
5. **媒体本地化**:在最终导入前,手动分批读取(每次最多 40 个)暂存文章中的图片,限制大小、格式、原站域名,自动重写正文及特色图片路径。其他 CDN 域名默认拒绝自动下载,并形成待复核项。
6. 检查扫描结果、Sitemap 缺页和图片缺失,明确点击“确认并导入”。将旧 URL / SEO 清单加入审计;存在未处理差异的迁移站继续受发布审批门禁限制。
7. 选择主题后使用原有 Worker 构建网站,查看 QA 和 ZIP。
- `POST /staging/{site}`:签名上传并生成不可变版本文件,不修改线上 current。
- `GET /sites/{site}/verify/{release}`:签名核对文件哈希、完整性、是否在线。
- `POST /sites/{site}/activate/{release}`:验证后原子切换 current 指针。
- `POST /sites/{site}/rollback/{release}`:校验、原子切换回旧版本。
- `GET /public/{site}/`:验证激活后网站首页实际可访问,Worker 会比对首页 SHA256。
**重要边界**:Sitemap 只用于发现遗漏,并不自动解析任意 Sitemap 页面内容;完整的 `srcset`、CSS 背景图片、跨域 CDN、附件、视频、登录后数据及复杂 Elementor/ACF/WooCommerce 迁移仍需要额外适配和人工复核。未运行 Sitemap 完整性审计时,系统不能保证完整发现旧站 URL。WP 媒体本地化是用户主动触发的、同步分批执行的步骤,不会在后台无界下载资源。
## V8.3 主要接口
所有接口需要原有 Session + CSRF + 网站权限;`POST` 不允许匿名调用。
| 接口 | 说明 |
|---|---|
| `POST /api/migrations/sites/{site}/wordpress/sessions` | 创建迁移会话 |
| `POST /api/migrations/sites/{site}/wordpress/sessions/{session}/scan` | 将 REST 扫描加入 Worker 队列;可传 `idempotency_key` |
| `GET /api/migrations/sites/{site}/wordpress/sessions/{session}` | 查询检查点、页数和警告 |
| `POST /api/migrations/sites/{site}/wordpress/sessions/{session}/sitemap` | 安全发现同源 Sitemap,JSON 可传 `url` |
| `GET /api/migrations/sites/{site}/wordpress/sessions/{session}/sitemap` | 已发现 URL 数、缺失计数、前 100 项示例 |
| `POST /api/migrations/sites/{site}/wordpress/sessions/{session}/media/localize` | 分批媒体本地化,JSON `limit` 1–40 |
| `POST /api/migrations/sites/{site}/wordpress/sessions/{session}/finalize` | 明确确认提交,建立 URL/SEO 基线与复核项 |
| `POST /api/migrations/sites/{site}/wordpress/sessions/{session}/cancel` | 取消会话;正在运行的任务另在任务中心申请取消 |
后台扫描任务使用 `build_jobs.kind='wordpress_scan'`,与原网站构建共享 Worker/容量限制/租约/退避。可使用 `/operations` 监控或使用既有企业任务 API。**扫描完成不代表迁移交付完成**。
## 测试与已知限制
## 四、运行回归
```bash
python -m pytest -q
python -m compileall -q app
bash scripts/check.sh
python scripts/verify_release.py
```
截至本次代码交付,130 项自动化测试在当前开发环境全部通过,包含 V8.2 的 120 项和本轮的 10 项专项测试。测试覆盖嵌套 Sitemap、压缩炸弹、XXE、缺页审计、媒体格式与同源限制、子进程任务派发、幂等、容量门禁、API 鉴权等。
**现有环境验证**:本地 Python、JavaScript 与 HTTP 模拟发布 Agent 的测试。远端真实公网 HTTPS、断网后的最终一致性、Docker Engine、浏览器跨设备交互以及正式域名端到端发布都还需要运维实机验收。严禁把模拟 Agent 测试记录成外网部署通过。
本环境没有 Docker Engine;没有实际执行 Docker 实机启动、GitHub 云端 CI、官方 Art Design Pro 编译、真实 WordPress 全量迁移、浏览器全流程或远端正式发布。是否能交付企业生产仍需上述验收。
## 五、限制及尚未实现
接下来的 P2 收尾任务:自动尝试多种 Sitemap 路径、WordPress 媒体库/分类标签迁移、REST 采集的统计/重试监控、媒体 CDN 授权白名单和批量迁移压测。之后再推进 P3 XML/API/只读数据库连接器、P4 整站编辑器、P5 安全发布、多语言与 PostgreSQL/Redis 生产化。
- 本轮新增 **原生 SFTP/S3 发布代码及只读 S3 指针网关**;真实 SSH/S3、CDN、DNS/HTTPS、原子切换在正式服务器上的验收仍未完成。
- Worker 取消发生在指针切换瞬间时可能形成“远程已经切换、任务记录尚未写入”的待复核状态;必须检查 Agent 的带签名版本清单并人工处理,不保证跨机器严格事务。
- 存在内容/SEO 警告时必须人工复核;系统不会自动保证真实站点 SEO 或询盘业务有效。
- Art Design Pro 官方完整工程尚未集成编译;企业级 PostgreSQL/Redis 高可用、SSO、容灾和完整生产安全审计待验收。
- P0–P4 尚存在复杂插件迁移、真实浏览器、生产 MySQL/TLS、独立设备设计深度等未关闭项。
更多细节:[V8.3 验收与剩余功能](docs/V8_3_RELEASE_STATUS.md)。
## V8.11:统一专业管理体验
本版在 V8.10 基础上统一五个专业工具页面的导航、当前网站选择、业务提示、表单焦点和操作按钮。编辑器将“草稿/预览/正式发布”分组,平板和手机提供结构/预览/属性面板切换;任务中心按迁移、构建、审批发布分为三个阶段。所有原业务 API 与 Docker 服务保持不变。
- 默认工作台:`http://localhost:8787/`
- 主题预览:`/theme-gallery`
- 页面编辑器:从工作台的“外观与设计”进入
- 高级建站:`/factory-studio`
- 数据迁移:`/production-v8`
- 任务与交付:`/operations`
详细功能对照与人工验收清单见 [`docs/V8_11_UNIFIED_ADMIN.md`](docs/V8_11_UNIFIED_ADMIN.md)。
运行测试:`python -m pytest -q --disable-warnings`。本版在当前环境通过 218 项测试。Docker 实机与浏览器跨设备回归仍需部署后完成。
参阅 [V8.14 原生发布配置](deploy/native-release/README.md)、[V8.14 验收报告](docs/V8_14_P5_ACCEPTANCE.md) 和 [V8.13 旧版发布验收](docs/V8_13_P5_ACCEPTANCE.md) 与 [V8.12 历史说明](docs/HISTORY_V8_12_README.md)。