Files
yidaima/RuoYi-Vue/docs/superpowers/specs/2026-07-11-project-delivery-readiness-gate-design.md

104 lines
5.9 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.

# 项目交付验收摘要与下载门禁设计
**状态:** 已实现P1-K
## 1. 背景
当前 `previewStatus=1``downloadReady=true` 代表项目结构已经可以渲染成 ZIP但不代表运行预览成功也不代表生成产物具备可追溯的 ProjectSpec、Generation Run 和文件清单。项目列表、个人中心、源码预览和一键生成工作台都把这一状态统一显示为“可下载”,公开下载接口也没有服务端质量门禁。
运行预览服务内部需要调用现有打包方法创建隔离工作区,因此不能在底层 `downloadAll` 上增加公开下载门禁。本轮把“草稿源码”和“基础验收产物”明确分开,并在 HTTP 下载边界执行最终校验。
## 2. 用户目标
- 明确区分源码已生成、运行预览已通过、基础验收已通过和允许认证下载。
- 运行预览失败时仍能下载源码草稿排查问题,但不能把它误称为验收产物。
- 一键生成成功且具备版本、Generation Run、文件清单和运行预览证据时可以下载基础验收产物。
- 高级调整或旧项目仍可下载草稿,不因新门禁突然失去已有能力。
- 服务端拒绝伪造的认证下载请求,不能只依赖按钮禁用。
## 3. 产物类型
### `DRAFT`
- 条件:项目当前 `previewStatus=1`,且最新源码生产任务确认源码已经生成。
- 用途:预览、调试、运行预览工作区和人工排查。
- 不声明已经通过运行或质量验收。
### `CERTIFIED`
- 条件:源码草稿可用;最新源码生产任务是一键生成;绑定的 Generation Run 成功且包含 Spec、Adapter、Template 和文件清单身份;最新尝试的 `RUN_PREVIEW` 阶段成功。
- 当前认证等级:`BASELINE`
- 后续 Java 测试、前端 Build、SQL 导入和 API Smoke 会继续加入同一门禁,当前不得把 BASELINE 描述为完整生产认证。
## 4. 交付状态
| 状态 | 含义 |
| --- | --- |
| `DRAFT` | 尚无可下载源码 |
| `SOURCE_READY` | 源码草稿已生成 |
| `PREVIEW_PASSED` | 运行预览通过,但版本追踪或基础验收尚未齐全 |
| `ACCEPTED` | 基础验收通过,允许认证下载 |
交付摘要固定返回四个用户检查项:源码生成、运行预览、基础验收、认证下载。每项状态为 `PASSED``PENDING``FAILED`,并附短说明和下一步动作。
## 5. 证据计算
1. 查询项目最近一个会改变源码的任务:`one_click_project``database_change_sync`
2. `previewStatus=1` 且任务结果确认 `downloadReady=true` 时,源码草稿可用;没有任务的旧项目只按 `previewStatus` 进入兼容草稿模式。
3. 一键任务本身必须为 `SUCCEEDED`,其结果或源码阶段必须关联一个属于当前用户和项目的成功 Generation Run。
4. Generation Run 必须包含 Spec 版本/哈希、Adapter 版本、Template 版本、聚合内容哈希和非空文件清单。
5. 最新尝试的 `RUN_PREVIEW` 阶段必须为 `SUCCEEDED`;旧阶段账本为空时可回退到结果中的 `previewStatus=RUNNING`
6. 数据库变更同步产生的源码只能作为草稿,直到后续质量运行创建新的可追溯认证证据。
## 6. API
新增:
```http
GET /front/project/{projectId}/delivery-readiness
```
现有下载接口增加参数:
```http
GET /front/project/{projectId}/download?artifactType=DRAFT|CERTIFIED
```
- 未传参数继续按 `DRAFT` 处理,兼容现有调用。
- `CERTIFIED` 必须通过服务端门禁。
- `DRAFT` 也必须确认当前源码草稿可用。
- 响应增加 `X-Factory-Artifact-Type``X-Factory-Certification-Level`,不改变 ZIP 内部生成方式。
## 7. 前端交互
- 一键生成结果区新增交付验收带,显示四项检查和下一步。
- 基础验收通过时按钮显示“下载验收源码”,请求 `CERTIFIED`
- 只有源码就绪时按钮显示“下载源码草稿”,请求 `DRAFT`
- 项目列表、个人中心和源码预览页现有下载入口明确改名为“下载源码草稿”。
- 交付摘要加载失败不覆盖已经完成的生成任务,只降级为草稿状态并让服务端做最终判断。
## 8. 边界
- 不新增数据库表或迁移。
- BASELINE 门禁暂不纳入生成项目的 Java 测试、前端 Build、SQL 导入和 API Smoke本轮只建立可扩展门禁与基础证据。
- 不改变运行预览内部打包流程。
- 不修改开发阶段暂缓处理的模型凭据和 TLS 配置。
## 9. 验收标准
- 运行预览失败的一键任务只能下载草稿,认证下载被服务端拒绝。
- 一键任务具有完整 Generation Run 与成功运行阶段时可以认证下载。
- 数据库同步或旧项目不会被误认证,但保留草稿下载。
- 项目修改导致 `previewStatus=0` 后,草稿和认证下载均被拒绝。
- 前端四种状态、按钮文案和实际请求产物类型一致。
## 10. 实施结果
- 新增 `ProjectDeliveryReadinessService`、交付摘要 API、四项用户检查和公开下载边界的服务端门禁。
- `CERTIFIED` 只接受当前源码对应的完整一键 Generation Run 与最新尝试运行预览证据;数据库同步和兼容旧项目只保留草稿能力。
- 阶段账本非空时不会回退任务结果中的旧预览状态;最新尝试尚未执行 `RUN_PREVIEW` 时保持待验收。任务非 `SUCCEEDED` 时,即使残留旧证据也不能认证。
- 项目编辑将 `previewStatus` 复位后,旧的阶段或 Generation Run 证据不能继续开放下载。
- 一键生成工作台展示交付验收摘要并按服务端结果选择产物类型;项目列表、个人中心和源码预览入口均明确为草稿下载。
- 独立运行预览重启仍是调试能力,不会补写认证证据。运行预览失败后,用户必须重新执行完整一键生成才能建立新的可追溯验收事实。
- P1-J/P1-K 后端聚焦测试 32 项、管理端全量测试 42 项、EasyCode 主流程测试 73 项、生产构建、Mapper XML 解析与开发服务检查均已通过。