docs: freeze pilot metrics and three-role acceptance

This commit is contained in:
malei 2026-08-02 02:20:03 +08:00
parent 598a250c81
commit 0cb22b7ddf
4 changed files with 180 additions and 12 deletions

View File

@ -192,6 +192,8 @@ API_ORIGIN=https://<api-domain> ./deploy/production-smoke.sh
### 8.2 三角色人工 smoke
逐项执行与签署以《试点三角色端到端验收清单-2026-08-02.md》为准下列为发布窗口最小摘要。
仅在预先标记的试点门店和测试宠主上执行,记录匿名化预约 ID/报告 ID不记录完整 token/手机号:
1. **boss**:用微信核验手机号创建试点门店;在 Admin/小程序补齐资料、容量、服务并显式完成开通;创建一次性员工邀请、保存创建证据后用小程序分享卡片;查看工作台、客户、日程。
@ -200,6 +202,10 @@ API_ORIGIN=https://<api-domain> ./deploy/production-smoke.sh
4. **权限反例**customer 不可进入后台A 店账号不可读取 B 店预约/报告/线索/邀请legacy 永久邀请码与直接建员工均返回停用码;删除员工后旧 session 立即 401。
5. **异常反例**:邀请手机号不匹配/过期/撤销/重复使用、无容量、非法状态迁移、缺前/后照片、错误报告 token、FFmpeg 失败均有可理解提示。
### 8.3 试点指标基线
角色 smoke 通过后才能开始计入真实样本。指标口径与 Phase 2 决策带见《试点指标采集与Phase2决策方案-2026-08-02.md》只读采集脚本为 `backend/db/queries/pilot_metrics.sql`。首次结果必须保存 `[from,to)`、门店内部 ID、四仓 commit、数据库快照时间和结果文件 SHA-256且三项指标可靠性反例为 0。
## 9. 回滚
### 9.1 应用与静态资源回滚
@ -224,6 +230,7 @@ API_ORIGIN=https://<api-domain> ./deploy/production-smoke.sh
- 最终配置门禁与后端只读预检;
- `nginx -t`、readiness、自动只读 smoke
- boss/staff/customer 三角色人工 smoke
- 试点指标查询基线、时间窗口与首份低敏结果(开始计样本时);
- Gitea/GitLab 回归未受影响;
- 监控、告警联系人、回滚点和值班窗口;
- 未解决问题清单及 Go/No-Go 决策人。

View File

@ -0,0 +1,84 @@
# 试点三角色端到端验收清单
> 日期2026-08-02
> 角色boss / staff / customer
> 状态:脚本与证据模板就绪;真实微信与生产环境待执行
## 1. 执行规则
- 至少准备 A/B 两家隔离测试门店、两个微信账号(老板/员工和一个独立宠主账号不得在证据中记录完整手机号、token、openid/unionid、验证码或 AppSecret。
- 先通过备份、八迁移、schema validate、31 项只读预检、liveness/readiness 与只读 smoke再执行会写业务数据的角色验收。
- 每项保存:执行时间、环境、四仓 commit、角色、结果、脱敏截图/响应业务码、问题单;失败后不直接改生产数据。
- 端到端主样本使用一只测试宠物和一笔可取消测试预约;测试完成后的业务数据按门店测试数据政策保留或由授权人员清理。
## 2. Boss开店与经营负责人
| ID | 场景 | 通过条件 | 结果/证据 |
|----|------|----------|-----------|
| B01 | 微信手机号核验入驻 | 创建独立门店与 boss会话有效不接受手填手机号/密码 | [ ] |
| B02 | 门店开通清单 | 资料、预约容量、至少一个服务项目满足后可完成;邀请员工可选 | [ ] |
| B03 | 创建员工邀请 | token 只在创建响应显示一次;列表只见脱敏手机号,可撤销 | [ ] |
| B04 | 配置真实号源 | 修改营业容量/服务时长后,公开可约时段同步变化且长服务跨桶 | [ ] |
| B05 | 查看行动工作台 | 今日预约、服务中、报告待发送、到期回访与列表数字一致 | [ ] |
| B06 | 代客预约 | 必须填写真实宠主;创建人与客户身份分离,容量满返回可理解冲突 | [ ] |
| B07 | 回访任务协作 | 可领取、改期、关闭;他人已领取时明确冲突 | [ ] |
| B08 | 回访后再次预约 | 读取真实号源,成功后才出现 rebook无号源失败不改变任务 | [ ] |
| B09 | 员工移除 | 只能删除本店 staff删除后旧会话立即失效AuditLog 低敏 | [ ] |
| B10 | 跨店反例 | A 店 boss 无法读取/修改 B 店预约、报告、客户、任务或设置 | [ ] |
## 3. Staff值班执行者
| ID | 场景 | 通过条件 | 结果/证据 |
|----|------|----------|-----------|
| S01 | 接受邀请 | 预览只见脱敏信息;微信核验手机号一致才能接受;过期/撤销/重复拒绝 | [ ] |
| S02 | 登录与权限 | 可进入 Admin/小程序本店工作流;不能删店、改仅老板设置或管理员工 | [ ] |
| S03 | 开始服务 | 仅 `new→doing`;谁点击谁成为技师;重复/非法迁移拒绝 | [ ] |
| S04 | 提交报告 | 前后图必填、一约一报告;成功后预约 `doing→done`,报告锁死 | [ ] |
| S05 | 发送报告 | 复制/二维码/预览不自动记 sent实际送达后选择渠道显式确认且幂等 | [ ] |
| S06 | 回访领取竞争 | 两名员工同时领取仅一人成功;非领取人不能改期/关闭/再次预约 | [ ] |
| S07 | 联系回执 | 未接通/稍后联系次数加一并回待领取;终态不回退 | [ ] |
| S08 | 联系信息隐私 | 开放任务可见联系电话;终态任务、工作台、时间线只脱敏 | [ ] |
| S09 | 客户事实时间线 | 可见预约→履约→报告→打开→留资→回访→rebook无备注/媒体/token/原始 metadata | [ ] |
| S10 | 退出/失效 | 本地退出需重新登录;被移除后旧 token 访问受保护接口失败 | [ ] |
## 4. Customer宠主
| ID | 场景 | 通过条件 | 结果/证据 |
|----|------|----------|-----------|
| C01 | 扫码/分享选店 | 普通 query 与小程序码 scene 均正确预填门店,可更换 | [ ] |
| C02 | 未登录填单 | 可先填;提交时登录;登录后草稿恢复且身份从 session 派生 | [ ] |
| C03 | 可约时段 | 只显示未来且覆盖完整服务时长的真实号源;容量满有重试提示 | [ ] |
| C04 | 创建/查看预约 | 只能创建和读取自己的预约;伪造 customerUserId 无效 | [ ] |
| C05 | 公开报告 | 匿名 token 可打开必要内容;不返回内部身份、完整 token 或坐标 | [ ] |
| C06 | 报告分享角色 | customer 仍看到留资/预约 CTA不出现员工内部发送操作 | [ ] |
| C07 | 下次服务留资 | 明示同意后提交;同报告同手机号重复提交幂等且只保留一个开放任务 | [ ] |
| C08 | 一键退订 | 有效 unsubscribeToken 可退订并取消开放任务;重复退订幂等 | [ ] |
| C09 | 退订后反例 | 退订不增加员工联系次数,不显示员工操作人,不再保留开放任务 | [ ] |
| C10 | 权限反例 | customer 调 Admin、员工任务或他人预约/报告接口被拒绝 | [ ] |
## 5. 跨角色完整样本
按顺序一次性执行并关联同一个 appointment/report/lead/task
```text
Boss 完成开通并邀请 Staff
→ Customer 选择真实号源预约
→ Staff 开始服务并提交唯一报告
→ Staff 实际发送后确认渠道
→ Customer 打开报告并提交下次提醒
→ Staff 领取 FollowUpTask先登记一次未接通并改期
→ Staff 再次领取,创建真实 Appointment
→ Boss 在客户时间线与报告漏斗确认完整事实链
```
必须同时验证失败分支:容量满、另一员工抢领、跨店 taskId、非领取人关闭、无效退订 token。主链与反例全部通过后该环境的三角色验收才能标记 PASS。
## 6. 签署
| 责任 | 姓名/日期 | 结论 |
|------|-----------|------|
| 试点门店老板 | | PASS / BLOCKED |
| Core Flow QA | | PASS / BLOCKED |
| Data Model Review | | PASS / BLOCKED |
| Privacy Review | | PASS / BLOCKED |
| Release Steward | | GO / NO-GO |

View File

@ -0,0 +1,75 @@
# 试点指标采集与 Phase 2 决策方案
> 日期2026-08-02
> 适用35 家独立宠物洗护单店
> 样本闸门:约 200 次完整服务
> 状态:指标口径冻结;等待真实试点数据
## 1. 决策目的
这轮试点不证明“功能很多”,只验证三件事:门店是否能连续履约、报告是否真的到达宠主、回访是否能形成可归因的再次预约。在样本闸门满足前,不进入支付、库存、储值、复杂会员、多门店组织、订单系统或泛 AI。
“完整服务”定义为同店一笔 Appointment 产生唯一 `service_completed` 事实。当前该事实只在进行中的预约成功提交唯一 Report 并转为 `done` 时产生,因此不能由页面点击或手工报表补记。
## 2. 样本与时间边界
- 试点门店35 家已完成开通、实际提供洗护服务的独立单店。
- 观察期:建议 48 周;所有日报/周报统一使用 Asia/Shanghai时间窗口为 `[from, to)`
- 总样本闸门:全店合计 `complete_service_count ≥ 200`
- 分布闸门:每家进入结论的门店至少 25 次完整服务,避免单店数据支配判断。
- 质量闸门31 项 production preflight 全为 0指标查询的三项可靠性反例全为 0。
- 第 50 次完整服务做一次口径复核,只允许修正采集缺陷;不得为了达标追溯篡改既有事件或更换分母。
## 3. 指标字典
| 指标 | 计算 | 用途 |
|------|------|------|
| 完整服务数 | 去重 `service_completed.aggregateId` | 200 次样本主闸门 |
| 履约闭环率 | 完整服务 / `service_started` | 店员能否顺畅完成服务与报告 |
| 报告确认发送率 | `report_sent` / `report_submitted` | 报告是否真正进入传播动作 |
| 24h 内发送率 | 提交后 24h 内首次 `report_sent` / 已提交报告 | 值班流程是否及时 |
| 报告打开率 | 去重打开过的报告 / 已确认发送报告 | 宠主是否收到并愿意打开 |
| 打开→留资率 | 去重 `lead_submitted` / 打开报告 | 下次服务提醒是否有价值 |
| 留资→再次预约率 | `rebook_created` / `lead_submitted` | 回访商业闭环;只认真实 Appointment |
| 到期回访按时完成率 | due_date 后两天结束前完成 / 已完成任务 | 员工是否真正执行队列 |
| 回访平均联系次数 | AVG attempt_count | 联系成本与任务设计负担 |
| 无效联系方式率 | invalid_contact / 已终结任务 | 留资质量与输入校验 |
| 退订数 | canceled + unsubscribed | 尊重宠主意愿并观察打扰风险 |
比率在分母为 0 时返回 NULL不展示 0%,避免把“没有样本”误解为“表现为零”。所有漏斗按门店分别看,再做全店汇总;不公布跨店客户级明细。
## 4. 决策观察带
以下是试点判断带,不是对外承诺;第 50 次样本只做一次合理性复核:
| 信号 | 健康观察带 | 需要访谈/修复 |
|------|------------|---------------|
| 履约闭环率 | ≥ 90% | 低于 90%:查开始服务时机、报告填写负担、异常中断 |
| 24h 内报告发送率 | ≥ 85% | 低于 85%:查工作台提醒、交接班与发送确认理解 |
| 报告打开率 | ≥ 60% | 低于 60%:查发送渠道、链接可达性、宠主认知 |
| 到期回访按时完成率 | ≥ 80% | 低于 80%:查领取机制、日期建议与人员负荷 |
| 归因完整性 | 100% | 任一伪 rebook 或事件缺失即停止使用该指标 |
留资率和再次预约率先作为探索性指标,不在首批样本设置硬成功线;需结合服务周期、门店客群和观察窗口解释。定量指标之外,每店每周访谈一次老板或值班员工,记录:最费时间步骤、最常绕开的步骤、误解文案、失败后的人工补救和是否愿意继续使用。
## 5. 采集与输出
事实源:`t_business_event`、`t_follow_up_task`,门店配置/开通状态只用于筛选试点范围。只读查询:`backend/db/queries/pilot_metrics.sql`。
执行规则:
1. 只在只读账号或只读副本执行,不把数据库凭据写入仓库或命令历史。
2. 先固定 `@pilot_from/@pilot_to/@pilot_store_id`,保存查询脚本 commit、数据库快照时间和结果文件 SHA-256。
3. 日报只观察系统异常、积压和隐私退订;周报才讨论转化,避免小样本日波动驱动功能变更。
4. 输出仅含门店内部 ID、计数、比率和时间不导出手机号、宠物名、员工名、token、openid/unionid、IP、备注或媒体 URL。
5. 每周结果关联当周应用四仓 commit 与是否发生迁移/事故;指标口径变更必须新建版本,不覆盖历史结果。
## 6. Phase 2 结论模板
达到样本闸门后只允许形成三种结论:
- `Continue`核心履约、发送、打开和回访执行均稳定3 家以上门店愿意继续,进入商业化小实验设计。
- `Iterate Core`:门店持续使用但一项核心流程明显掉队;只修预约→报告→发送→回访内核,再补 50 次样本。
- `Stop/Redesign`:两家以上门店无法持续完成核心流程,或数据/隐私可靠性无法保证;停止扩功能,重新验证问题与操作流程。
即使结论为 Continue下一阶段也先验证付费意愿与服务边界不直接建设全套会员/收银/库存。

View File

@ -2,6 +2,8 @@
> 目标:让 35 家独立宠物洗护单店用真实业务完成约 200 次“预约 → 服务 → 报告 → 查看/回访 → 再次预约”闭环,以数据决定 Phase 2 是否进入商业化。本文是开通和验收清单,不代表任何门店已经开通。
> 指标与决策口径以《试点指标采集与Phase2决策方案-2026-08-02.md》为准角色执行证据以《试点三角色端到端验收清单-2026-08-02.md》为准。
## 1. 试点准入
每家门店必须满足:
@ -66,8 +68,8 @@
- 扫门店入口,选择服务和可约时段,提交预约;
- 打开报告公开页,确认门店与宠物信息准确且没有内部字段;
- 提交提醒留资,重复提交不生成重复线索;
- 从报告页再次预约,验证门店和服务上下文连续。
- 提交提醒留资,重复提交不生成重复线索或重复开放任务
- 门店员工领取 FollowUpTask 后从真实号源创建再次预约,验证门店、客户与服务上下文连续。
## 5. 试点期支持节奏
@ -79,7 +81,7 @@
## 6. 200 次完整服务的统计口径
“一次完整服务”必须同时满足
“一次完整服务”以去重 `service_completed.aggregateId` 为机器统计口径;该事实只有在以下链路成立时产生
1. 有真实 `Appointment`,客户身份和创建人语义正确;
2. 合法 `new → doing → done`
@ -93,15 +95,15 @@
| 指标 | 口径 | 用途 |
|---|---|---|
| 完整服务数 | 符合上方五项的服务 | 判断样本进度 |
| 预约完成率 | done / 有效预约 | 判断主链路稳定性 |
| 报告提交率 | 有报告的 done / done | 判断员工执行成本 |
| 报告确认发送率 | 显式确认发送 / 已提交报告 | 判断门店触达执行 |
| 报告打开率 | 首次打开报告 / 已确认发送报告 | 判断宠主价值;历史 unknown 不纳入分母 |
| 留资率 | 去重留资 / 首次打开报告 | 判断回访意愿 |
| 再次预约率 | 报告后窗口内产生新预约的 StoreCustomer / 可观察客户 | 判断闭环价值 |
| 容量冲突率 | 因无容量被拒绝的请求 / 可约请求 | 校准容量而非承诺零等待 |
| 人工救援率 | 需技术/运营改数据或绕流程的服务 / 完整服务尝试 | 判断是否可规模化 |
| 完整服务数 | 去重 `service_completed` Appointment | 判断 200 次样本进度 |
| 履约闭环率 | 完整服务 / `service_started` | 判断员工能否完成服务与报告 |
| 报告确认发送率 | 显式 `report_sent` / `report_submitted` | 判断门店触达执行 |
| 24h 内发送率 | 提交后 24h 内首次确认 / 已提交报告 | 判断交接及时性 |
| 报告打开率 | 去重打开报告 / 已确认发送报告 | 判断宠主价值;历史 unknown 不纳入分母 |
| 打开→留资率 | 去重留资 / 打开报告 | 判断回访意愿 |
| 留资→再次预约率 | `rebook_created` / 去重留资 | 只认 FollowUpTask 真实预约闭环 |
| 到期回访按时完成率 | due 后两天内完成 / 已完成任务 | 判断门店执行能力 |
| 人工救援率 | 需技术/运营改数据或绕流程的服务 / 完整服务尝试 | 人工周报,判断是否可规模化 |
| P0 故障数 | 权限、数据、主链路阻断 | Go/No-Go 硬门槛 |
指标只使用最小必要业务 ID 和聚合数周报不展示完整手机号、token 或私密媒体 URL。