v0.4.0 M3.5 体验补齐 #1
Reference in New Issue
Block a user
Delete Branch "dev"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
- PATCH /api/v1/pets/{petId} 支持 avatarAssetId 三态:缺省不改、显式 null 清空、给值设置。这是 pets 域唯一的三态字段——M2 惯例「null 与缺省同义」 无法表达「删掉头像」,而 name/species/sex 本就不允许为空,故差异刻意限定 在本字段 - 权限按「本次请求碰了哪些字段」定档:仅改头像为 WRITE(owner+caregiver, ADR-022:头像属日常照护信息,与体重/疫苗同档),碰到任一资料字段仍是 MANAGE(仅 owner),混合请求按更严的一半判;viewer 一律 403/40300 - 头像与资料共用同一把乐观锁:仅改头像也吃 version,旧版本必答 409/40902 - asset 校验复用 T3-03 引用侧协议 + purpose='pet_avatar':不存在/非本人/ 已删/用途不符答 404/40405,本人未就绪答 422/42203(user_avatar 资源也不能 当宠物头像) - 详情与列表响应补 avatarUrl(本地 SigV4 现签预签名 GET,沿用 community 读侧 先例):仅当 asset 为 ready 才签,指针在而资源退出 ready 时降级为 null, 不签一个下载必 404 的地址,也不隐式清理指针 - PetRepository 读改为返回 PetRow(含头像存储坐标),签名上移到 PetService, 与 community 的 PostRow → PostResponse 装配同构——过期 URL 不下沉到仓储层 - pet 模块加入 aws-sdk s3(仅本地签名,不直连对象存储)与读侧 patbond.media 配置;compose 补同一组 PATBOND_MINIO_* 环境变量 - 测试 +11(成功/清空/缺省保留/降级/caregiver 与 viewer 权限/防枚举 404/ asset 五态/畸形入参/乐观锁与重放),pet 模块 89 → 100 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>- 新增 GET /api/v1/me/community-stats,返回 {receivedLikeCount, publishedPostCount}:本人「已发布且未软删」帖的 like_count 之和与帖子数 - 口径:草稿不计(尚非作品)、软删不计(删帖即撤回其数字)、运营态 hidden/archived 不计(在 M3 契约里对所有人不可见)、他人帖不计;空数据答 0 不答 null,任何已认证用户都有 stats,从不 404 - 走读侧实时聚合不引冗余列(ADR-022):写侧无按人计数器,也就没有可漂移的 副本;单次查询压在 ix_posts_author_created 的前导列上 - 端点独立而不并入 /users/{userId}/follow-stats(ADR-022 决策 A):后者主体是 「某用户的关注数」,混入「我的获赞」会让一个载荷有两个主体;且本端点主体 恒为 token 里的自己,路径上没有可枚举的 userId - 测试 +12(空数据零值/多帖求和/自赞与取消赞/草稿与软删与运营态排除/他人帖 不串味/401 两态/无他人入口/并发与重复读幂等/载荷形态),community 模块 94 → 106 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>doc 仓正典 main@5f02909 冻结 v1.4.0 后的 api 侧收尾:字节级同步快照、守卫 升版、新增/变更操作入契约一致性矩阵。**零生产代码改动**(只改契约快照与测试)。 快照同步(字节级,md5 与正典逐一比对一致 a7081fb84f1207eef579ab94025f5801): - 四模块 openapi-v1.3.0.yaml → openapi-v1.4.0.yaml,删旧文件(守卫只认一份, 保留旧快照是死重;历史版本由 git 与 doc 仓承载,沿 T3-19 先例) - 四份守卫期望升版:1.3.0/31/43/72 → 1.4.0/32/45/75 矩阵扩展(173 → 181 格,豁免仍为 1 格): - patbond-auth +5 格:PATCH /api/v1/me 全响应矩阵(200 设值 / 200 显式 null 清空 / 400 空 patch / 401 / 404 双码 40400+40405 / 422 42203),并让 GET /api/v1/me 在 nickname 非空分支再走一遍严格校验。注意 /api/v1/me 的守卫与 矩阵都在 auth 模块(实现在 user,契约测试跨服务发请求),扩契约易漏 - patbond-pet +1 格:PATCH /api/v1/pets/{petId} 新增 422/42203;404 单元格 补 40405 第二种业务码(幽灵 asset 与用途不符 asset 合并同答),并补一格 挂 ready 头像的 200 - patbond-community +2 格:GET /api/v1/me/community-stats 200(空数据零值与 有数据 1 赞/2 作品两分支)+ 401(由全操作循环覆盖) - patbond-user media 域 2 操作 8 格不变(v1.4.0 未触碰其冻结面) T3.5-04/05/06 遗留的 11 格契约守卫红(auth 2 + pet 9,根因为新增字段未冻结) 全部转绿。测试 379 → 381(+2 个新增矩阵方法),根反应堆 clean test 全绿, check-secrets.sh --all exit 0。 mutation 自证(三处定向注毒均红、还原即绿):CommunityStats.required 注入 fakeStatsField → GET /me/community-stats 200 报漂移;Me.required 注入 fakeMeField → GET+PATCH /me 200 报漂移;Pet.required 注入 fakePetAvatarField → POST /pets 201 等 9 格报漂移。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>