Files
浅念 95982fad23 upgrade: adopt V8.32.0-dev.1 (theme preview iframe fix, editor simple mode)
Overlay 46 upstream items; full patch set re-applied (all patched files
reset by overlay regardless of upstream change status — lesson recorded).
Verified: theme suites 35/35; dual-baseline 418 passed vs pristine
389+29 ours, FAILED-set diff EMPTY (same 10 Windows env fails).
Live: container 8.32.0-dev.1 healthy, hesupipe 192 entries intact,
trade-pro build 203 pages 0 errors.

Co-Authored-By: Claude Code <noreply@anthropic.com>
2026-10-26 11:18:45 +08:00

456 lines
35 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# SiteForge Enterprise V8.32.0-dev.1
本轮修复后台主题预览空白、改进主题图库失败提示,并将可视化编辑器调整为**默认简洁模式**。完整变更、验证与限制见 [README_V8_32.md](README_V8_32.md) 和 [验收报告](reports/v832/V8_32_主题预览与编辑器验收.html)。
---
# SiteForge Enterprise V8.31.0-dev.1
本轮汽车主题按 [Magic Bridge Auto](https://magicbridgeauto.com/) 的导航及选车体验进行行业化重设计,完整说明见 [`README_V8_31.md`](README_V8_31.md)。保留汽车旧主题快照及其他三套主题。
---
# SiteForge Enterprise V8.30.0-dev.1
最新交付说明:[`README_V8_30.md`](README_V8_30.md)。
---
# SiteForge Enterprise V8.29.0-dev.1 — 主题与可视化编辑器体验优化
新功能及测试见 [README_V8_29.md](README_V8_29.md)。此版本以 V8.28 完整源码为基线,保留其全部业务能力。
---
# SiteForge Enterprise V8.28.0-dev.1 — 引导式上线中心
> V8.27 全量源码基础上的集成增量;保留原四套主题、移动端、WordPress、公共组件、编辑器和 Worker。上线向导不跳过任何服务端审批、质量或发布检查。
# SiteForge Enterprise V8.27.0-dev.1 — 简洁后台与新手建站向导
> 当前状态:**开发集成版,不能据此认定生产上线验收完成。** 在 V8.26 完整源码上新增三步建站创建、按实际内容/任务记录显示的上线操作指引、精简网站概览和手机布局适配;保留 V8.26 公共组件、全站设计、WordPress 迁移和发布能力。
>
> 详细说明:`docs/V8_27_USER_FRIENDLY_WORKSPACE.md`。本轮隔离回归按模块 379 项通过,但一次性/组合分批检查有超时与旧断言迁移;真实 Art Design Pro 编译、PostgreSQL/Redis 及生产发布仍待验收。
## 快速体验
- 独立交互演示:`examples/V8_27_新手友好建站工作台_交互演示.html`(模拟网络,只展示流程)
- 源码后台入口:`/` → 「创建网站」或选中网站后「建站操作指引」
- 本轮截图与测试报告:`reports/v827/`
## 快速验证
```bash
python -m pytest -q tests/test_v827_guided_workspace.py
node --test tests_js/*.test.cjs
python scripts/http_end_to_end.py
python scripts/browser_guide_v827.py
```
---
# SiteForge Enterprise V8.26.0-dev.1
最新版说明请先阅读 [README_V8_26.md](README_V8_26.md)。以下为历史版本说明。
---
# SiteForge Enterprise V8.25.0-dev.1 — 公共组件与全站设计协作基础
> **交付状态:开发集成版。** 本版基于 V8.24 完整源码,在现有编辑器加入公共组件版本快照、关联插入、引用页预检、选择性同步到草稿及历史恢复。**不会自动改已发布网站**,需要按原有草稿审核、构建与部署流程完成上线。
## V8.25 本轮功能
- 组件库“复制插入” / “关联插入”两种选择;关联插入在区块内记录版本与内容指纹。
- 不可变源组件版本快照、更新版本乐观锁、查看历史与恢复为新版本;已有组件自动补“当前版本”快照。
- 在一个站点内查看关联引用页面,识别本地修改、已是最新版及发布冲突。
- 选择性同步到一个或多个页面**新草稿**:完整预检校验、批次事务、失败整批回滚、独立历史审计,不更改现有在线内容。
- 属性栏“解除关联”保留当前区块,避免以后参与公共组件同步。
- 四套内置主题、移动端抽屉与底部 Tabs、两层嵌套编辑器、WordPress 迁移、SEO、Worker 和发布接口保持兼容。
[离线交互演示](examples/V8_25_公共组件_版本与同步演示.html) · [完整功能与安全说明](docs/V8_25_SHARED_DESIGN_SYSTEM.md) · [本轮验收报告](reports/V8_25_验收报告.html)
```bash
python -m pytest -q tests/test_v825_shared_components.py
node --test tests_js/*.test.cjs
python scripts/http_end_to_end.py
python scripts/regression_v825.py --timeout 55 --group-size 2
```
**验收限制:** 生产 PostgreSQL/Redis、多 Worker、远程发布与回滚、官方 Art Design Pro 工程编译以及已登录后台的真实浏览器验收未完成;隔离 Chromium 仅验证离线交互演示。
---
# SiteForge Enterprise V8.24.0-dev.1 — 深层画布编辑与复用组件体验
> **交付状态:开发集成版**。在 V8.23 完整项目上继续开发;原数据库结构、四套主题、移动端抽屉菜单、底部 Tabs 与静态发布机制保持兼容。本版本没有执行生产环境部署。
## 本轮新增
1. **第二层可视化编辑**:在双层布局中点击组件,直接编辑、复制、上下排序、删除,并以层级路径显示所选内容。
2. **直接创建内层内容**:可添加内层布局及第二层内容组件,不需要手工填写 JSON。
3. **独立响应式布局**:为内层布局设置桌面列宽、列间距、手机 1/2 列、平板 1/2/3 列。
4. **图片选取更加准确**:本站素材库、上传图片应用到当前支持图片的组件,而非误写外层布局。
5. **组件库更好用**:可保存当前选中的内层组件,插入组件副本;跨页面自动联动仍未实现。
6. **验收工具与演示**:新增深层操作 Python/Node 测试、HTTP+Worker 测试、隔离 Chromium 演示、独立分组回归入口。
- [打开离线交互预览](examples/Studio_V8_24_深层嵌套可视化编辑器_交互演示.html)
- [V8.24 技术说明](docs/V8_24_DEEP_NESTED_STUDIO.md)
- [回归机器可读结果](reports/v824-regression/result.json)
```bash
bash scripts/check.sh
python scripts/http_end_to_end.py
python scripts/studio_nested_browser_v824.py
```
**限制:** 当前只支持既有两层 layout 深度;组件库为复制副本而非跨站点实时同步。生产 PostgreSQL/Redis、官方 Art Design Pro 编译和登录后的真实浏览器 E2E 均未完成验收。
---
# SiteForge Enterprise V8.23.0-dev.1 — 嵌套组件与响应式可视化编辑
> **交付状态:开发集成版。** 基于 **V8.22.0-dev.1 完整源码**继续开发;未覆盖原版本或任何正式网站的数据。此次更新保持原有 HTML 构建、SEO、四套主题、抽屉导航及可选底部 Tabs 的数据兼容性。
## V8.23 本轮完成
1. **列内组件画布直接操作**:支持在多列布局中选中直接子组件、复制、删除、同列上下移动;标题/简介(适用组件)可双击直接修改。使用父布局 ID + 子组件 ID 的白名单校验,不接收任意执行命令。
2. **直观的嵌套属性编辑**:选中列内组件后,右侧“内容”面板展开对应的标题、文字、图片路径、链接等普通输入表单,不再强制在“响应式”面板翻找组件。
3. **桌面布局快捷预设**:等宽两列、左宽右窄、左窄右宽;列间距 0–64px。平板/手机各自的列数、跨列、顺序、显隐继续独立配置。
4. **草稿与历史版本兼容**:仍沿用 schema 白名单、原有版本快照、乐观锁、草稿保存和发布审批流程。嵌套组件操作不执行线上构建或发布。
5. **回归与离线演示**:新增 Node 安全操作测试、嵌套接口测试和真实 Chromium 沙箱交互测试,另提供无需服务器的交互演示。
## 快速验证
```bash
bash scripts/check.sh
python scripts/http_end_to_end.py
python scripts/studio_nested_browser_v823.py
# 单独测试 Node 嵌套组件操作安全性
node tests/test_nested_helpers_v823.cjs
```
## 查看与使用
- 后台入口:`/editor/{site_id}/{entry_id}` → 在页面中添加“多列自由布局” → 添加列内组件 → 画布上点选或双击文字 → 右侧编辑 → 保存草稿。
- [离线交互演示](examples/Studio_V8_23_嵌套组件编辑器_可交互预览.html)(仅演示数据,保存按钮不修改后端)。
- [开发与验收报告](docs/V8_23_ADVANCED_STUDIO.md);[分批回归日志](reports/v823-regression/result.json)。
**仍未完成**:任意深度的子节点直接编辑、公共组件跨页面联动、真正自由定位的布局、Art Design Pro 官方工程编译、生产 PostgreSQL/Redis/Docker 实测以及真实后台 Chromium localhost 端到端验收。已测试的是多列布局直接子组件和受限沙箱交互,不应描述为完整自由设计器或生产可上线。
---
# SiteForge Enterprise V8.21.3 — 四套内置主题手机端统一优化
> **状态:开发集成版**。从 V8.21.2 完整源码升级;原站点与数据未覆盖。四套内置主题统一支持抽屉菜单,可选的 1–5 项手机底栏 Tabs 默认关闭。正式生产的域名部署、Apple/Android 真机与 Art Design Pro 官方构建仍需独立验收。
## 本轮重点
- `automotive` / `industrial` / `corporate` / `minimal` 手机端导航统一为右侧抽屉,菜单可包含二三级链接。
- 全站设计新增 `mobile_tabs`:默认 `enabled=false`;开启后新增、删除、排序、图标、站内/HTTPS/电话/邮箱链接均通过可视化表单配置。
- 支持底部 `菜单` Tab 打开抽屉;适配安全区域与小屏宽度。
- 保留现有网站内容、URL/SEO、设计草稿与构建/发布流程;旧配置无需迁移,默认不显示底栏。
- 手机端 4 套主题 × 首页/产品列表/产品详情/文章详情 × 375/390/430px 离线 Chromium 回归通过。
## 快速使用和测试
- **直观预览**:`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`。
---
# SiteForge Enterprise V8.21.2 — 简洁可视化编辑器(开发集成版)
本轮优化聚焦**降低学习成本**,而不是增加技术菜单。新增三步操作指引、显眼的草稿保存和设计发布、左侧一键添加区块、右侧内容/样式/设备编辑,复杂模板与动态数据设置默认收起;中间预览可以直接点击区块选中。FAQ、轮播、画廊、优势、数字统计等条目使用逐项普通表单,**不再要求普通用户填写 JSON**。
- 编辑器:原 `/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 和生产环境验收仍需独立完成;不要据此宣布正式投产。
---
# SiteForge Enterprise V8.21.1 — Studio 可视化编辑器体验增强
> 基于 V8.21.0-dev.1 完整源码迭代;当前版本 `8.21.1-dev.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 全工程编译或真实企业部署验收。
---
# 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
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
```
推荐先用独立测试域名 / Docker volume。Web 默认只监听 `127.0.0.1:8787`。如果反向代理到外网,需要设置 HTTPS 和 `SITEFORGE_COOKIE_SECURE=true`,自行配置防火墙、TLS 与可信反向代理。
**PostgreSQL/Redis 测试配置**:`docker compose -f compose.enterprise.yaml up -d --build`。这只是配置与兼容层,不能视为分布式高可用验收通过。
## 三、远程发布如何配置?
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}/` 是自身提供的内容探针,不等于你公司的域名已经自动生效。**
生产系统不应在管理后台填入任意远程 URL:仅运维人员通过可信环境配置发布目标,且 `safe_http` 禁止访问回环、内网、云元数据与 DNS 重绑定目标。
### Agent 路由
- `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。
## 四、运行回归
```bash
python -m pytest -q
python -m compileall -q app
bash scripts/check.sh
python scripts/verify_release.py
```
**现有环境验证**:本地 Python、JavaScript 与 HTTP 模拟发布 Agent 的测试。远端真实公网 HTTPS、断网后的最终一致性、Docker Engine、浏览器跨设备交互以及正式域名端到端发布都还需要运维实机验收。严禁把模拟 Agent 测试记录成外网部署通过。
## 五、限制及尚未实现
- 本轮新增 **原生 SFTP/S3 发布代码及只读 S3 指针网关**;真实 SSH/S3、CDN、DNS/HTTPS、原子切换在正式服务器上的验收仍未完成。
- Worker 取消发生在指针切换瞬间时可能形成“远程已经切换、任务记录尚未写入”的待复核状态;必须检查 Agent 的带签名版本清单并人工处理,不保证跨机器严格事务。
- 存在内容/SEO 警告时必须人工复核;系统不会自动保证真实站点 SEO 或询盘业务有效。
- Art Design Pro 官方完整工程尚未集成编译;企业级 PostgreSQL/Redis 高可用、SSO、容灾和完整生产安全审计待验收。
- P0–P4 尚存在复杂插件迁移、真实浏览器、生产 MySQL/TLS、独立设备设计深度等未关闭项。
参阅 [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)。