Files
yidaima/RuoYi-Vue/docs/superpowers/specs/2026-07-12-project-factory-v1-closeout-design.md

62 lines
5.1 KiB
Markdown
Raw Permalink Normal View History

# 项目生成工厂 V1 收口设计
**状态:** 已实施并通过代码回归P1-M / P1-N / P1-O2026-07-12
## 1. 目标
在 P1-L 持久化 Quality Run 之上完成三个剩余轮次:冻结认证源码制品;把运行预览迁移到持久化 Docker Preview Worker使用黄金样例形成可追溯的 V1 端到端验收记录。完成后,项目生成工厂 V1 主线关闭Knowledge Pack、多技术栈 Adapter 和插件市场继续留在 V2。
## 2. P1-M 认证制品固化
- 新增 `factory_project_certified_artifact`,唯一绑定通过的 Quality Run、Generation Run 和源码聚合哈希。
- Quality Worker 四项检查通过后,重新读取同一服务端源码 ZIP计算 ZIP SHA-256生成规范化质量报告并计算报告 SHA-256。
- ZIP 和报告通过 `CertifiedArtifactStore` 写入不可变对象路径;本地实现使用临时文件、原子移动和只读最终路径,接口允许后续替换 S3/OSS。
- 制品记录只在 ZIP、报告及两项哈希全部持久化后进入 `READY`。失败记录不可下载,不覆盖旧制品。
- `CERTIFIED` 下载必须读取当前 Quality Run 对应的 READY 冻结 ZIP并返回制品 ID、ZIP SHA-256、报告 SHA-256 和冻结时间响应头;不得调用临时源码重新打包。
- `DRAFT` 下载保持兼容,仍可按当前项目即时打包。
## 3. P1-N 隔离容器预览
- 新增 `factory_project_preview_job`,状态为 `QUEUED``CLAIMED``STARTING``RUNNING``STOP_REQUESTED``STOPPED``FAILED``EXPIRED`
- Web 请求只校验项目、创建或返回活动 Job不解压、不分配本机进程、不直接运行生成项目。
- `ProjectPreviewJobWorker` 可独立部署,通过租约和 fencing token 认领 JobWeb 节点默认关闭 WorkerPreview Worker 部署显式开启。
- `PreviewContainerRuntime` 负责启动、检查和停止容器。本地生产实现只调用 Docker CLI并强制 CPU、内存、PIDs、只读根文件系统、临时文件系统、标签、网络和 TTL 参数。
- 源码 ZIP 只写入 Worker 输入目录,容器以只读挂载读取;运行输出、脱敏日志和页面截图写入独立输出目录。
- Job 持久化公开 URL、容器 ID 哈希、截图 SHA-256、过期时间和有界日志不公开宿主路径、Docker socket、数据库凭据或原始容器 ID。
- 过期 Job 由 Worker 停止容器并标记 `EXPIRED`;停止操作幂等。
## 4. P1-O 端到端验收
- 新增 `factory_project_v1_acceptance_run` 和有序检查表绑定用户、项目、Generation Run、Quality Run、认证制品和 Preview Job。
- 固定五项黄金样例检查:`GENERATION``FAILURE_RECOVERY``VERSION_ROLLBACK``CONTAINER_PREVIEW``CERTIFIED_DOWNLOAD`
- 验收器只调用项目工厂公开服务边界,不直接修改内部状态。每项记录脱敏摘要、证据 SHA-256、时间和耗时。
- 认证下载检查要求连续读取两次得到相同制品 ID、长度和 SHA-256预览检查要求 Docker Job 为 RUNNING、截图存在且未过 TTL。
- 版本回滚必须产生新版本/Generation Run不能覆写历史版本失败恢复必须证明失败任务保留、重试产生新尝试且从可信检查点继续。
- 五项全部通过才将 V1 Acceptance Run 标记为 `PASSED`。失败保留证据,可新建下一次验收,不覆盖历史。
- 提供启动、最新和历史 APIEasyCode 交付区展示 V1 验收状态,不展示内部指纹和执行 Payload。
## 5. 数据与安全边界
- 三组新表同步写入独立升级脚本、`front_workbench.sql``db.sql`
- 不自动连接或迁移外部数据库。
- 不修改开发阶段暂缓的模型明文凭据和 TLS 设置。
- Docker 不可用时 Preview Job 明确失败并保留诊断,不回退到主进程直接运行。
- 所有路径必须位于配置根目录下ZIP 解压继续拒绝路径穿越,日志和错误信息继续脱敏和限长。
## 6. V1 完成标准
- Quality Run 通过后可查询且只能下载冻结认证制品。
- 相同认证下载重复读取字节和哈希完全一致。
- Web 进程不再直接启动生成项目进程;预览由持久化 Worker 和 Docker Runtime 执行。
- 预览具备截图、TTL、停止、资源限制和失败诊断。
- 黄金样例五项验收可持久化执行并形成可重跑证据。
- 旧临时认证下载入口和不一致文案清理完成,草稿与认证制品语义明确。
## 7. 实施与部署边界
- P1-M 已完成Quality Worker 在终态前冻结 ZIP 和规范化质量报告;`CERTIFIED` 下载只读取 READY 对象并校验 SHA-256。
- P1-N 已完成:生产 Spring 边界改为持久化 Preview Job旧宿主进程类不再注册。独立 Worker 使用 Docker CLI、资源限制、TTL、截图和 fencing仓库包含可构建镜像。
- P1-O 已完成:五项黄金样例 Acceptance Run、生产探针、API 和 EasyCode 状态面板已落地。
- 本机没有 Docker CLI因此没有在本机声称真实容器和黄金项目已经跑通。部署环境需构建 Worker 镜像、启用独立 Worker、准备黄金项目证据后执行 V1 验收 API。
- 本轮未连接或迁移外部数据库,未修改暂缓的模型凭据与 TLS 配置。