petstore-docs/qa-reports/phase0-store-onboarding-staff-invitation-2026-08-02.md

60 lines
2.9 KiB
Markdown
Raw 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.

# Phase 0 门店开通与员工邀请验收记录
> 日期2026-08-02
> 状态Code Complete / Ready for Release待生产迁移与微信真机验收
> 生产数据库与服务器:本批未触碰
## 1. 自动验证
| 检查 | 结果 |
|------|------|
| Backend tests | PASS193 tests0 failure/error/skip |
| Backend package | PASS |
| Admin production build | PASS |
| H5 build | PASS |
| mp-weixin build + app-json verification | PASS |
| Ontology validation/drift | PASS258 条65/65 HTTP、15/15 JPA、0 drift |
| Release shell syntax | PASS`backend/deploy/*.sh` |
## 2. 自动化覆盖
- token 原文与数据库 hash 分离、手机号脱敏;
- 邀请手机号不匹配不创建账号;
- 接受成功创建 staff、消费邀请、写低敏 AuditLog
- 开通必填项缺失不能完成,单人门店可完成;
- 已完成开通的门店不能再清空名称、电话或地址;
- 老板微信核验注册不产生可登录密码,并同时写入 `store_registered` BusinessEvent 与 AuditLog
- Audit metadata 拒绝 token/手机号;
- 门店/角色/删除状态变化会立即让旧 session 失效;
- Nginx Petstore 专用 access log 只记录 `$uri`,不记录携带报告/邀请 token 的 query
- 第六个迁移包含 token hash、状态机与六项回执不变量。
## 3. 三角色真机验收(发布前必做)
### Boss
- [ ] 新微信手机号创建门店,无手填手机号/明文密码;自动登录后进入开通清单。
- [ ] 缺地址时不能完成;补齐资料、确认容量和服务后可完成;单人门店无需先邀请员工。
- [ ] 创建 3/7/14/30 天邀请,创建后只显示一次原始口令;可分享小程序卡片。
- [ ] 邀请列表只有脱敏手机号pending 可撤销accepted 不能撤销。
### Staff
- [ ] 从卡片进入看到正确门店、姓名、脱敏手机号与有效期。
- [ ] 不匹配微信手机号被拒绝且不创建账号;匹配手机号成功加入并直接获得 staff session。
- [ ] 邀请重复打开幂等登录同一 staff过期/撤销邀请有明确提示。
- [ ] 被老板删除后,已有页面下一次受保护请求立即 401 并要求重新登录。
### Customer / 权限反例
- [ ] customer 不能查看/创建/撤销门店邀请,也不能完成开通。
- [ ] 已有 customer 手机号接受员工邀请明确返回账号冲突,不静默改变角色。
- [ ] legacy 永久邀请码查询/注册、直接创建员工、旧老板/门店注册入口均返回明确停用码且无写入。
## 4. 发布门禁
- [ ] 按固定顺序执行第六个迁移 `20260802_create_store_onboarding.sql`,六项验证均为 0。
- [ ] 以最终生产配置运行 JPA `validate` + 24 项只读不变量预检。
- [ ] 微信体验版双微信账号完成 Boss → 分享 → Staff 接受全链路;证据不包含完整手机号或 token。
- [ ] 旧版本回滚已确认忽略新增表/列;不执行 down migration。