- releases.md 新增 v0.4.0(M3.5 体验补齐):三仓 tag、门禁 8 项证据、 首次经 PR 流程发布的操作记录与流程验证结论、期间安全事件索引 - checklist 变更登记:**回归清单由两份改为四份**(M1/M2/M3/M3.5), 原则「每个引入对外端点的迭代都应有对应 E2E 脚本并在此后每次发布回归」 - feature-checklist 新增第 13 节(M3.5 共 13 条) - 08 号报告:E2E 四份 42/42 场景 234 断言零失败、契约偏差 0; 另实证零迁移在存量库升级路径(Flyway: No migration necessary) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,66 @@
|
||||
|
||||
---
|
||||
|
||||
## v0.4.0 — M3.5 体验补齐(2026-09-14)
|
||||
|
||||
**首次经 PR 流程发布**(v0.3.0 为直推 main,分支保护启用前)。
|
||||
|
||||
### 三仓 tag
|
||||
|
||||
| 仓库 | tag | 提交 | 内容 |
|
||||
| --- | --- | --- | --- |
|
||||
| patbond-api | `v0.4.0` | `3cd8005` | 用户资料读写 + 宠物头像 + 社区统计;379 测试;契约 v1.4.0 快照 |
|
||||
| patbond-flutter | `v0.4.0` | `fbcd734` | 中文本地化 + 日期录入收口 + 资料页/编辑页 + 头像接线;597 测试;四份 E2E 脚本 |
|
||||
| patbond-doc | `v0.4.0` | 本记录所在提交 | 契约 v1.4.0 + M3.5 报告 01~08 + 安全事件复盘 + 服务器暴露面清单 |
|
||||
|
||||
### 版本内容(相对 v0.3.0 的增量)
|
||||
|
||||
- **用户资料**:`GET /me` 补 `nickname`/`avatarUrl`;新增 `PATCH /me`(三态:键缺省=不改 / 显式 null=清空 / 给值=设置)
|
||||
- **头像**:用户与宠物头像上传(复用 M3 的 MinIO 两步上传),`purpose` 白名单 +`user_avatar`/+`pet_avatar`
|
||||
- **社区统计**:`GET /me/community-stats`(获赞总数 + 作品数,读侧实时聚合,无新冗余列)
|
||||
- **客户端体验**:中文本地化(此前从未配置 `flutter_localizations`,Flutter 静默回退英文)、日期录入收口共享层(7 处调用点 + 手输 + 「今天」快捷)、资料页 demo 退役、花费卡显示实际月份
|
||||
- **契约**:openapi.yaml **v1.4.0**(32 路径/45 操作/75 schema),**对 v1.3.0 纯增量**(无字段删改/类型变更/必填收紧,已写入 `info.description`)
|
||||
- **零 Flyway 迁移**(ADR-022):所需列 V1/V3/V5 早已存在,`purpose` 白名单为配置项
|
||||
- **决策**:ADR-022
|
||||
|
||||
### 发布门禁证据
|
||||
|
||||
| 门禁项 | 结果 | 证据 |
|
||||
| --- | --- | --- |
|
||||
| 全量测试 | ✅ | api **379** / flutter **597**,双绿 |
|
||||
| **E2E 回归(四份,同环境串行)** | ✅ | M1 7/7 + M2 11/11 + M3 14/14 + **M3.5 10/10** = **42/42 场景、234 断言零失败** — [08 号报告](iterations/iteration-3.5/08-release-e2e-regression.md) |
|
||||
| 契约偏差 | ✅ **0** | 逐场景对照 v1.4.0;契约计数机械复核 32/45/75 |
|
||||
| 契约向后兼容 | ✅ | v1.3.0→v1.4.0 纯增量,v1.3.0 客户端无需改动 |
|
||||
| 契约一致性矩阵 | ✅ | 173→**181 格**,11 格「未声明字段即漂移」的红全部转绿,mutation 三处注毒自证 |
|
||||
| **零迁移在存量库上实证** | ✅ | compose 起于既有 `pgdata` volume,Flyway 日志 `Current version: 5 / No migration necessary.` |
|
||||
| CI(push + **pull_request**) | ✅ | api 5m31s / 6m42s;flutter 3m46s / 3m44s;doc 2m58s |
|
||||
| 凭证防泄漏 | ✅ | `check-secrets.sh --all` exit 0 |
|
||||
|
||||
### 发布操作记录
|
||||
|
||||
1. **首次走 PR 流程**(分支保护生效后):两仓各建 `dev → main` PR(标题 `v0.4.0 M3.5 体验补齐`),等 `pull_request` 状态检查转绿后以 **Fast-forward only** 合并 → **main == dev、零合并提交、历史保持线性**。
|
||||
2. **流程本身也被验证了**:v0.3.0 是直推 main,「PR + 状态检查」这套机制从未真实走过。本次确认:`pull_request` 触发器会跑、分支保护确实要求该检查通过、PR 会自动跟随 dev 新提交重新检查(发布途中 E2E 脚本提交推入 dev,PR 随即重跑)。
|
||||
3. **CI 从安全事件恢复后的首次完整验证**:见下方「期间事件」。
|
||||
|
||||
### 期间事件:Gitea gitconfig 注入(已闭环)
|
||||
|
||||
本迭代期间发生一次安全事件,CI 全面中断约一天。完整复盘见 [07 号报告](iterations/iteration-3.5/07-security-incident-20260911.md),纪律固化见新建的[服务器暴露面清单](server-exposure.md)。要点:攻击**未达成代码执行**、三仓代码经核对**未被篡改**、**无系统层入侵**;处置后外部验证四项通过。
|
||||
|
||||
### checklist 变更(下次发布适用)
|
||||
|
||||
- **回归清单由两份改为四份**:M1/M2/M3/M3.5。原则是「每个引入对外端点的迭代都应有对应的 E2E 脚本,并在此后每次发布回归」。
|
||||
- 发布前若 dev 仍有提交推入,PR 检查会重跑——**以最终 HEAD 的检查结果为准**,不要用旧的绿色状态放行。
|
||||
|
||||
### 已知遗留
|
||||
|
||||
**真机验证**:M2 两项 + M3 四项 + M3.5 新增(头像上传弱网、头像缓存)——步骤全部备齐在[真机验证清单](device-verification.md),待设备到位。
|
||||
|
||||
**功能遗留**:「我的收藏与草稿」列表页(后端就绪,缺 2 页面)、月份网格选择器、`SegmentedButton` 主题债、`widthPx/heightPx` 恒 null、`eventVersion` 口径未定型、uploading 超时清理任务、429 限流、话题/关注列表/作者主页(ADR-018 剪出)。
|
||||
|
||||
**跨迭代技术债**:access token 黑名单、`/internal` 改 mTLS。
|
||||
|
||||
**待评估**:文档站公开可访问是否加访问控制(见服务器暴露面清单)。
|
||||
|
||||
## v0.3.0 — M3 社区(2026-09-10)
|
||||
|
||||
**首次正式发布**,发布流程首次演练。
|
||||
|
||||
Reference in New Issue
Block a user