5.1 KiB
5.1 KiB
项目生成工厂 V1 收口设计
状态: 已实施并通过代码回归(P1-M / P1-N / P1-O,2026-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 认领 Job;Web 节点默认关闭 Worker,Preview 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。失败保留证据,可新建下一次验收,不覆盖历史。 - 提供启动、最新和历史 API;EasyCode 交付区展示 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 配置。