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

62 lines
5.1 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.

# 项目生成工厂 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 配置。