feat: expand EasyCode software factory workflows
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
# 项目生成工厂 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 配置。
|
||||
Reference in New Issue
Block a user