Files
cms-website/SITEFORGE_V7_2_IMPLEMENTATION_PLAN.md
T

16 KiB
Raw Blame History

SiteForge Factory V7.2 项目差距审计与下一步实施计划

审计对象:C:\Users\30997\Downloads\SiteForge_Factory_V5_Web_Docker\SiteForge_Factory_V7_2
审计日期:2026-10-22
目标:把当前“可控试点版”推进为需求文档所描述的可迁移、可搭建、可发布、可运维的网站工厂。

1. 执行结论

当前项目已经形成可运行的产品骨架,具备:站点管理、内容模型、区块编辑器、主题安装与版本固定、静态构建、构建队列、基础质量检查、备份接口、团队角色、审计记录、PostgreSQL/Redis 部署骨架和 HTTPS/HMAC 远程发布代理。

但它还不能被定义为“完整需求已实现”或“生产就绪”。更准确的定位是:

  • 单机/小团队、受控数据量下可演示和试点;
  • 主要快乐路径已有自动化测试;
  • 真实迁移、批量数据、跨平台恢复、多语言、企业身份、生产可观测性仍不完整;
  • PostgreSQL、远程发布和备份链路目前属于“有骨架,尚未完成生产证明”。

建议不要继续堆叠零散页面或按钮,而是先关闭平台正确性,再按“迁移闭环 → 数据工厂 → 编辑/模板 → 发布/多语言 → 生产治理”推进。

2. 本次验证事实

2.1 自动化与静态验证

  • Python 测试共发现 86 项。
  • Windows 默认编码环境:80 通过、6 失败。
  • PYTHONUTF8=1 环境:85 通过、1 失败。
  • 5 项失败来自测试使用 Path.read_text() 却未显式指定 UTF-8,属于跨平台测试可靠性问题。
  • 剩余 1 项是真实缺陷:SQLite 在线备份后临时数据库文件句柄在 Windows 未及时释放,TemporaryDirectory 清理时报 WinError 32。
  • 39 个 Python 文件通过 AST 解析。
  • 7 个 JavaScript 文件通过语法检查。
  • 默认、Enterprise、Release Agent 三套 Compose 配置解析通过。

2.2 尚未完成的环境验证

以下项目不能用“Compose 配置能解析”替代,仍需在真实 Docker Engine/目标服务器验证:

  • 镜像完整构建及冷启动;
  • Web/Worker 心跳、异常重启和任务续租;
  • PostgreSQL + Redis 全量测试;
  • 浏览器端端到端、响应式、可访问性和视觉回归;
  • 备份恢复演练;
  • Release Agent 的 TLS、真实传输、切换、回滚和发布后探测。

3. 需求覆盖矩阵

能力域 当前状态 主要缺口 结论
站点/内容基础 已有 站点环境、默认语言、发布策略、蓝图不是一等模型 部分完成
迁移工厂 有 WXR、WordPress REST、CSV/JSON/XLSX、有限抓取 无持久化迁移会话、断点续传、媒体盘点、冲突队列、回滚和真实大型样本证明 试点级
数据工厂 有映射、dry-run、提交 无通用 XML、认证 API、只读 MySQL、分批暂存、可逆导入、人工覆盖保护、5 万行证明 明显缺失
内容模型 基础字段可用 缺 enum/relation/array/media、唯一性、索引、跨字段校验、完整工作流 部分完成
页面编辑器 12 类区块、嵌套布局、响应式属性、撤销/重做、复用组件 缺审批/锁定/冲突合并、更多业务区块、视觉回归、完整无障碍保证 部分完成
主题/模板 主题包、版本固定、兼容检查、预览 “模板”仍主要是主题+首页预设,不是可复用多页面站点蓝图;升级差异/回滚验证不足 部分完成
构建系统 静态构建、版本目录、质量报告 构建读取实时数据库而非冻结快照;无内容哈希、依赖图、增量构建和产物保留策略 高风险缺口
作业系统 幂等、租约、取消、重试、容量限制 仅正式支持 build;无统一进度、死信、诊断日志;未覆盖迁移/导入/媒体/发布 部分完成
发布系统 本地发布、HMAC Release Agent、版本切换/回滚 缺完整 TLS 部署证明、重放防护、发布后外部探测、CDN 清理、SFTP/S3/Git 等目标 试点级
多语言 文档有设计 无 locale、翻译组、canonical/hreflang、多语言 sitemap 全链路实现 未实现
PostgreSQL/Redis 有兼容桥和 Compose DDL 迁移不完整;全局 advisory lock 串行化;无连接池/按站点锁;Redis 仅唤醒 非生产级
安全/权限 登录、CSRF、Origin 检查、角色、审计 缺 CSP/Permissions-Policy/TrustedHost;代理信任过宽;无 OIDC/MFA/会话撤销/密钥生命周期 部分完成
备份恢复 SQLite 在线备份和部分目录打包 Windows 句柄缺陷;遗漏主题包/发布数据等;无统一清单、校验和、外部副本与定期恢复证明 阻断生产
可观测性 Request ID、基础日志、健康接口 无 metrics/tracing/告警/SLO/作业看板 未完成
供应链/CI Python/JS/Compose/PG 基础 CI 锁文件无哈希;无依赖审计、镜像扫描、SBOM、签名;CI 允许 commit=unknown 不完整
商业验收 有 readiness/report 概念 架构要求的四类真实试点没有签字验收证据 未闭环

4. 当前必须先修的缺陷

P0:发布阻断

  1. 修复 Windows SQLite 备份句柄泄漏
    显式关闭在线备份使用的源/目标连接,再退出临时目录;增加 Windows 与 Linux 的备份→恢复→内容/媒体校验测试。

  2. 统一 UTF-8 测试和文件协议
    所有文本读写显式 encoding="utf-8";CI 增加 Windows runner,避免用 PYTHONUTF8=1 掩盖代码问题。

  3. 让版本证据真实可信
    CI 构建必须注入真实 Git SHA;健康检查拒绝 unknown;镜像 OCI revision、API commit、部署清单三者必须一致。

  4. 建立一次真实容器验收
    默认 SQLite 和 Enterprise PostgreSQL 两种拓扑都执行冷启动、建站、导入、编辑、构建、预览、发布、备份恢复。

  5. 补安全基线
    增加 CSP、Permissions-Policy、TrustedHost;把受信代理网段做成显式配置,避免无条件 forwarded-allow-ips=*;核对 Cookie、上传、登录限速和错误回显。

  6. 同步文档与事实
    README 当前测试数量与实际 86 项不一致;V6 运维文档的版本返回示例也需要更新。所有“已完成”声明都必须绑定自动化或验收报告。

P1:平台正确性

  1. 把所有历史 CREATE TABLE IF NOT EXISTS 收敛到有序、校验和固定、可回滚/可恢复的 schema migration;SQLite 和 PostgreSQL 使用同一版本账本。
  2. PostgreSQL 从 SQL 翻译桥升级为明确支持的持久层:连接池、事务语义、唯一约束错误、按站点 advisory lock、并发测试。
  3. 作业模型推广到 build/import/crawl/media/publish/migration,增加进度、阶段、结构化日志、死信、重放和保留清理。
  4. 每个构建先生成不可变输入快照:site_blueprint + theme@version + content_snapshot + asset_manifest + route_registry + seo_policy;Worker 只读取快照。
  5. 为构建输入、产物和报告记录 SHA-256,保证相同输入可复现,并能证明审批后内容没有漂移。
  6. 扩大备份范围到数据库、media、theme_packages、构建/发布元数据、配置引用;生成 manifest 和校验和;备份自动复制到独立存储。
  7. 为 secrets 增加版本、轮换、撤销和使用审计;环境变量/文件引用保留为开发模式,生产对接 Secret Manager/Vault 类接口。

5. 分阶段实施路线图

M0 — V7.2.1 稳定基线(3–5 人日)

交付:

  • 关闭上述 P0 缺陷;
  • Windows/Linux、Python 3.12/3.13 全绿;
  • 两套 Compose 最小端到端 smoke;
  • 一份可重复执行的备份恢复报告;
  • CI 中真实 SHA、镜像摘要和版本清单可追踪。

退出门槛:86/86 测试通过;不依赖环境编码;备份恢复后数据库记录、媒体哈希和构建记录一致;health commit 不为 unknown。

M1 — 平台内核完成(7–12 人日)

交付:

  • 全量 schema migration;
  • 不可变构建快照及内容哈希;
  • 通用作业状态机与结构化任务日志;
  • 产物/日志/失败任务保留策略;
  • PostgreSQL 并发和事务测试;
  • metrics、基础告警和运维面板。

退出门槛:排队后修改内容不会改变已提交构建;Worker 崩溃后任务可续租或明确进入死信;两个站点并发构建不会被单一全局锁无谓串行。

M2 — 迁移工厂闭环(8–12 人日)

交付:

  • migration_sessions 持久化状态机;
  • 探测→抓取→解析→路由/模板识别→媒体盘点→映射→预览→提交→对比报告;
  • WordPress REST/WXR、Sitemap、受控 crawl 统一为可恢复任务;
  • 冲突/警告队列、人工确认、断点续传;
  • 旧 URL→新 URL、SEO 字段、媒体、页面数量对账。

退出门槛:用一份获得授权的真实 WordPress 网站完成两次可重复迁移;中途杀死 Worker 后可续传;报告能解释所有缺失、冲突和重定向。

M3 — 数据工厂闭环(10–15 人日)

交付:

  • CSV/JSON/XLSX/XML、认证 HTTP API、只读 MySQL 连接器;
  • 数据源 profile 与加密 secret reference;
  • 分页/游标、限速、超时、重试、断点续传;
  • staging rows、字段映射、验证、去重、错误下载;
  • import batch、原始来源标识、人工覆盖优先级、可逆提交。

退出门槛:5,000 行交互验收和 50,000 行压力验收;故障注入后无半提交;回滚只撤销本批变更,不覆盖后续人工编辑。

M4 — 编辑器、内容模型与站点模板(10–15 人日)

交付:

  • locale/environment/publish policy/site blueprint 成为一等模型;
  • 内容字段增加 enum、relation、array、media、唯一性、搜索/筛选和跨字段校验;
  • draft→review→published→archived 工作流和审批审计;
  • carousel/video/tabs/pricing/form-link/map/timeline/testimonials/team 等高频区块;
  • 多页面站点模板,实例化时不复制私有业务内容;
  • 主题升级差异预览、兼容检查和一键回滚。

退出门槛:从模板新建站点后能独立升级内容;键盘操作、焦点、语义、对比度和三档响应式视觉回归通过;多人编辑冲突不会静默覆盖。

M5 — 发布与多语言(12–20 人日)

交付:

  • 先加固现有 Release Agent:TLS、nonce/replay cache、最小权限、审计、外部健康探测、失败自动回滚;
  • 再按业务优先级增加 SFTP、S3/CDN 或 Git CI 目标,不同时铺开所有连接器;
  • site_locales、translation groups、locale route registry;
  • canonical、双向 hreflang、多语言 sitemap 和语言切换;
  • 灰度/预发布、缓存失效、发布后链接抽检。

退出门槛:一次失败发布可自动回到上个健康版本;重复签名请求不能重放;双语言站点不存在孤立翻译或错误 hreflang。

M6 — 生产与企业治理(15–30 人日)

交付:

  • OIDC/SSO、可选 MFA、会话撤销、权限回归测试;
  • 审计日志外送/不可变保留;
  • Prometheus/OpenTelemetry 或等价指标与追踪、SLO 和告警手册;
  • 依赖审计、镜像扫描、SBOM、镜像签名和许可证清单;
  • 容量、峰值、混沌、灾备演练;
  • RPO/RTO 与保留策略经业务签字。

退出门槛:达到约定 SLO;恢复演练达到 RPO/RTO;高危漏洞为零或有经批准的限时豁免;值班人员仅凭 Runbook 能完成恢复。

6. 推荐的下一迭代(两周)

两周内只做一条平台纵切,不开启大规模 UI 扩展:

第 1 周

  1. 修复备份句柄和 5 个 UTF-8 测试。
  2. CI 增加 Windows,校正测试计数,注入并校验真实 SHA。
  3. 增加安全响应头、TrustedHost 和可信代理配置。
  4. 建立 SQLite/PG 两套 Docker smoke 脚本。
  5. 定义 build snapshot、job event、artifact manifest 三个数据契约。

第 2 周

  1. 实现不可变 build snapshot,改 Worker 只消费 snapshot id。
  2. 给作业增加 progress/stage/events/dead-letter。
  3. 迁移第一批遗留表到 schema registry,并验证空库升级和旧库升级。
  4. 完成备份 manifest、SHA-256 校验和独立恢复命令。
  5. 在 CI 执行一次“建站→构建→备份→清空测试部署→恢复→重新构建”的闭环。

迭代结束演示必须证明:提交构建后再修改页面,原任务仍生成提交时版本;Worker 被终止后任务不会丢;备份能在空白环境恢复;所有测试跨平台通过。

7. 架构优化原则

  1. 数据库是业务事实源,队列不是。 Redis 只做通知;任务状态、幂等键和租约落数据库。
  2. 构建输入必须不可变。 审批、构建、发布都引用 snapshot/hash,不读取“现在的站点”。
  3. 外部输入先暂存再提交。 爬取、API、数据库和文件导入必须进入 staging,校验/映射/人工确认后再原子提交。
  4. 路由是一等数据。 使用 route registry 管理 locale、来源、行为和冲突,不从标题临时推断最终 URL。
  5. 人工编辑优先级显式化。 每个字段记录 source、source key、同步时间和 manual override,增量同步不得静默覆盖。
  6. 大任务统一进入作业系统。 请求线程只创建任务;迁移、抓取、媒体处理、构建、发布都可恢复、可观测、可取消。
  7. 每个“完成”都有证据。 单元测试证明代码分支,E2E 证明用户流程,恢复演练证明可恢复,试点签字证明商业可用。

8. 四个最终业务验收场景

项目不能仅以“测试全绿”宣告完整,还需完成架构文档要求的四类试点:

  1. A:WordPress 汽车网站迁移 — 页面、文章、产品、媒体、SEO 和重定向全量对账。
  2. B:工业企业新站搭建 — 从模板到内容录入、响应式编辑、构建、预发布和正式发布。
  3. C:增量数据更新 — 再次同步时更新源数据,但保留人工修改并提供冲突报告。
  4. D:模板复用 — 从已验收站点提炼多页面模板,新建站点不携带客户私有内容。

每个试点必须保存:输入清单、映射版本、构建 snapshot/hash、质量报告、发布记录、回滚记录、遗留问题和业务负责人签字。

9. 预计投入与排期建议

  • M0–M1:10–17 人日,先串行完成,建立稳定地基。
  • M2–M5:40–62 人日,可由两条工作流并行,但共享 schema/job/snapshot 契约。
  • M6:15–30 人日,需结合真实部署和企业要求。
  • 总计:65–109 人日;若由 2 名熟悉 Python/FastAPI、前端和 Docker 的工程师执行,合理日历周期约 9–14 周,另加真实试点反馈时间。

估算不包含大规模视觉设计、客户数据清洗、第三方服务采购和等保/渗透测试认证。若首个商业目标只需要 WordPress 迁移 + 静态发布,应把 SFTP/S3、多语言、SSO 分阶段开启,避免范围同时膨胀。

10. “完整项目”定义(Definition of Done)

只有同时满足以下条件,才能将版本标记为完整:

  • 需求覆盖矩阵无未解释的缺口,所有延期项有明确版本和责任人;
  • Windows/Linux 支持矩阵全绿,真实浏览器 E2E 和可访问性门禁通过;
  • SQLite 和 PostgreSQL 的升级、备份、恢复、并发和故障测试通过;
  • 迁移/导入/构建/发布均可中断恢复、审计和回滚;
  • 构建产物可由不可变输入重现,发布可追踪到 commit、snapshot、theme 和 artifact hash;
  • 四个业务试点完成并签字;
  • 安全、供应链、监控、告警、Runbook、RPO/RTO 均有证据;
  • 文档内容与当前代码、版本、测试数量和部署方式一致。