第18章 学生项目冲刺六:发布、展示与复盘

本周从v1.0.0-rc.1或后续候选出发,完成发布前审查。审查包括公开边界、许可证、依赖和安全。项目还要通过干净环境复现与最终实机验证。随后发布v1.0,并依据仓库证据开展展示和复盘。

最终候选
→ 公开与权利检查
→ 干净环境复现
→ v1.0发布
→ 实机展示
→ 外部反馈
→ 工程与AI协同复盘
→ 下一版本议题

展示不是脱离项目的宣传材料。产品行为、版本、指标和限制都应与仓库中的v1.0一致。

一次演示只能说明特定条件下出现了结果。正式发布还要使他人能够取得同一版本、复现过程并了解限制。可复现发布增加了整理成本,却使成果能够被审阅、维护和继续开发。

完成本章后,应当能够:

18.1 固定最终候选

周初选择一个候选提交:

候选标签:
Git提交:
硬件修订:
固件版本:
服务器/用户端版本:
数据集:
模型:
策略:
JSON模式:

从此只接受:

新功能进入v1.1里程碑。

18.2 建立公开范围

18.2.1 三类项目对象

内部开发仓库
├─ 完整开发历史
├─ 受控调研、数据和配置
└─ 公开候选内容
        ↓
公开源仓库
├─ 允许公开的源代码与文档
└─ 发布定义
        ↓
v1.0发布构建物
├─ 固件/服务包
├─ 模型或取得说明
├─ SBOM与散列值
└─ 发布说明

三者不能默认完全相同。受控数据和内部服务信息可以保留在内部仓库,但不能进入公开源仓库与构建物。

18.2.2 逐项盘点

| 路径/对象 | 来源 | 权利/授权 | 敏感性 | 公开决定 | 处理证据 |
|---|---|---|---|---|---|

覆盖:

AI生成内容仍需团队检查来源、质量和许可证风险,不能因生成方式而自动视为可公开。

18.3 完成许可证和第三方声明

18.3.1 选择适合项目对象的许可证

根据学校和课程要求决定:

LICENSE说明软件或项目主体,README.md明确其他目录是否采用不同许可。无法确认权利的对象从公开版本移除或只提供取得方法。

18.3.2 第三方声明

THIRD_PARTY_NOTICES.md:

| 组件/文件 | 版本/提交 | 来源 | 许可证 | 在项目中的用途 | 声明位置 |
|---|---|---|---|---|---|

保留第三方要求的版权和许可证文本。评审实际发布构建中是否包含该组件,不能只检查依赖配置文件。

18.3.3 标准许可证标识

对项目自有且适用统一许可证的源文件,按批准结果添加标准SPDX标识。第三方文件保留自身标识,不批量覆盖。

18.4 执行安全和隐私清理

18.4.1 自动检查

python tools/secret_check.py
python tools/project.py dependency-check
python tools/project.py sbom
python tools/project.py release-check

按项目环境选择实际命令。任何检查器都不能替代人工检查。

18.4.2 人工检查

[ ] .env和本地秘密文件未跟踪
[ ] Git历史无未处理秘密
[ ] 内部地址和测试账户已替换
[ ] 设备ID和用户数据已脱敏
[ ] 默认配置遵守最小数据采集
[ ] 调试日志不输出令牌和原始敏感数据
[ ] 模型和数据公开范围与授权一致
[ ] SECURITY.md提供批准的报告入口
[ ] 发布包没有临时日志和调试构建

发现已提交令牌时,先吊销并向教师报告。是否清理历史、重新建立公开仓库或改变发布方式由维护者决定,不能只删除当前行。

18.5 完善外部使用入口

18.5.1 README.md

外部读者应能找到:

项目解决的问题
系统结构
支持硬件和版本
快速构建与运行
数据和模型取得方式
最小端到端验证
当前限制与非适用用途
贡献、安全和支持入口
许可证范围

所有命令在干净环境实际执行。README.md不写“高准确率”“低功耗”等没有版本、测量和条件的描述。

18.5.2 贡献与支持

CONTRIBUTING.md说明:

SUPPORT.md说明支持版本和范围。课程结束后无法持续响应的事项如实说明。

18.5.3 部署和回退

部署说明包含:

回退必须实际执行一次,不能只写理论命令。

18.6 从干净环境复现

在新目录克隆公开候选:

git clone <公开候选地址>
cd <project>
git switch --detach <最终候选标签>
git status --short

按照README.md:

python tools/project.py doctor
python tools/project.py fetch-model <实际模型版本>
python tools/project.py verify-model <实际模型版本>
python tools/project.py release-check
python tools/project.py build

完成真实设备最小闭环,记录:

# v1.0复现记录
- 候选标签和提交:
- 环境:
- 硬件:
- 数据/模型/策略:
- 构建命令:
- 构建物SHA-256:
- 自动检查:
- 实机输入:
- 事件ID或序号:
- 用户结果:
- 回退验证:
- 未解决差异:

任何未记录的手工步骤都补入文档并形成新候选。

18.7 编写最终发布说明

AI可以从已合并合并请求整理初稿:

请根据v0.1.0到最终候选之间已经合并的合并请求和CHANGELOG.md,
按以下栏目生成发布说明初稿:
- 用户可见功能
- 硬件与固件
- 数据与模型
- 服务器和用户端
- 测试和质量
- 已知限制
- 安装、升级和回退
- 许可证和第三方材料

每一项必须引用MR或Issue编号。
不得补充未测量指标、未验证兼容性和未完成安全结论。

人工核对:

18.8 发布v1.0.0

最终门禁:

[ ] 候选完成试用和缺陷复测
[ ] 公开范围和权利清单通过
[ ] LICENSE与第三方声明通过
[ ] SBOM与实际构建一致
[ ] 安全和隐私检查通过
[ ] 干净环境构建与实机验证通过
[ ] README.md、部署和回退准确
[ ] 最终构建物与SHA-256固定
[ ] 发布说明与候选一致
[ ] v1.0阻塞Issue为0

创建:

git switch main
git pull --ff-only
git status --short
git tag -a v1.0.0 -m "v1.0.0 first stable student release"
git show v1.0.0
git push origin v1.0.0

由标签流水线生成发布包,核对后发布到学校批准的平台。正式发布后不移动标签、不覆盖构建物;修复使用v1.0.1。

18.9 设计真实产品演示

18.9.1 演示结构

建议8—10 min:

1 min:用户问题、证据和v1.0边界
1 min:系统结构和三课程分工
3 min:真实设备成功路径
1 min:一个失败与恢复路径
1 min:模型、版本和限制
1 min:Git工作流与AI协同证据
1 min:后续议题

演示时显示:

18.9.2 演示必须可重复

准备:

可以准备真实操作录制作为故障备用,但不能用录制结果冒充当场成功。现场失败时展示日志、版本和恢复过程,也属于工程能力证据。

18.9.3 不夸大模型和产品

准确表述:

“在model-x、hardware-y和测试场景z下,
本组记录到以下实际结果……”

避免:

“系统能够适应任何环境。”
“模型已经完全解决误报。”
“产品可以直接量产。”

课程v1.0是稳定的教学项目基线,不自动等于经过法规、可靠性和量产验证的商业产品。

18.10 用仓库证据说明工程过程

展示选择3—4个关键节点:

立项MR:怎样收敛项目范围
技术决策:为什么选择当前硬件或推理位置
一次AI越界:怎样用diff发现并收敛
一次缺陷Issue:怎样复现、修复和回归
v1.0流水线:怎样形成发布证据

不需要展示完整聊天记录。关键是任务、AI建议、人工判断、Git差异和验证之间的关系。

18.11 建立后续反馈入口

演示与公开后,把反馈分为:

类型 处理
缺陷 版本、复现、实际与预期、证据
新功能 用户问题、场景和价值证据
模型效果 输入、模型、策略、环境和授权数据
硬件兼容 硬件修订、接口、构建和板级结果
安全问题 按SECURITY.md非公开报告

建立v1.1里程碑,只选择经过证据支持的后续项。课程结束不要求立即实施。

18.12 复盘AI协同过程

18.12.1 从任务记录而不是印象开始

docs/retrospective/ai-collaboration.md:

| 议题 | AI承担 | 人工承担 | 接受的建议 | 拒绝或修正 | 验证 | 结果 |
|---|---|---|---|---|---|---|

按任务类型总结:

18.12.2 分析有效条件

对成功任务回答:

18.12.3 分析失控和返工

常见原因:

每个原因都要对应下一次可执行的改进。例如,可以把任务拆成接口与实现两个合并请求,不写“以后更认真”。

18.12.4 比较人工与AI的责任

项目中AI适合:

人必须负责:

这不是固定工具分工,而是本课程v1.0实践中形成的责任边界。

18.13 形成个人工程作品集

每位学生选择:

为每项写:

问题
→ 我的判断
→ Git证据
→ 验证结果
→ 对产品版本的影响

作品集链接到仓库固定提交或公开合并请求,不只放截图。涉及内部数据时使用脱敏摘要。

18.14 完成项目工程复盘

项目复盘回答:

# 工程复盘

## 项目结果
- v1.0范围:
- 实际用户结果:
- 未完成:

## 版本路线
- v0.1:
- v0.5:
- v1.0-rc:
- v1.0:

## 三项关键决定
-

## 三项主要缺陷及处理
-

## 数据、模型和硬件协同
-

## Git工作流
- 最有效:
- 最大等待:
- 冲突与回退:

## AI协同
- 有效任务:
- 失控任务:
- 人工控制方法:

## 质量和限制
-

## v1.1候选
-

复盘使用议题、合并请求、流水线、测试和版本记录,不凭记忆重写过程。

18.15 本章小结

本章完成学生项目v1.0发布。团队核对公开权利和安全边界,并从干净环境复现构建和设备闭环。版本标签和散列值固定发布身份。真实演示呈现产品结果、失败恢复和工程证据。

六周项目从一个项目原点开始,经过工程基线、v0.1、v0.5和发布候选逐步扩展。AI加速了限定任务,Git、测试、实机和同伴评审确保成果能够被理解、验证和维护。

课程结束时,最重要的成果不只是一个演示原型,而是一套学生能够迁移到后续课程的开发方法:

定义问题
→ 验证最大风险
→ 建立最小闭环
→ 用AI实施小任务
→ 用Git控制变更
→ 用证据验证
→ 按版本迭代
→ 公开并持续维护

18.16 综合实践

  1. 完成公开范围、许可证、第三方材料和软件物料清单审查,形成可公开内容及排除内容清单。
  2. 由另一组依据README.md从干净目录复现最终候选。双方通过合并请求消除隐含步骤。
  3. 设计一段可重复的真实产品演示。演示包含正常路径、一个故障和恢复过程,结果与v1.0.0保持一致。
  4. 统计AI建议在不同任务中的接受、修正和拒绝情况。用数据说明AI适合的任务、人工责任和下一轮改进。
  5. 形成个人工程作品集和项目复盘,并从外部反馈建立一个有证据的v1.1议题。