用例:面向近期瑞幸消费者的定向优惠券活动
版本:v1.0(草案) 状态:草案 权威性:说明性

场景
瑞幸咖啡希望在新加坡发起一场营销活动,面向过去 30 天内有过瑞幸消费的用户发放优惠券。
这场活动的目标,是从合资格用户中选出最多 5000 人,并通过下游业务系统向他们发券。
本文档是说明性用例,用来展示新修订后的 SCP 与 SCS 规范如何映射到一个由广告客户发起的定向人群筛选与发券场景。
本文档中使用的 canonical protocol term 以 SCP 协议概览 和 SCP 核心规范 为准。
为什么这个用例重要
这个场景很有代表性,因为它同时体现了新版 Symphony 体系中的多个关键点:
- 发起方是广告客户,而不是普通终端用户
- 资格判断依赖的是处于 Vault 边界内的受保护消费记录
- 任务本身带有 geography、时间窗口与人数上限约束
- 目标人群结果必须经过验证后,才能成为可被活动使用的可信事实
- 发券动作位于 finalized protocol accounting 之后的下游
因此,这个用例很适合说明:协议可以支持隐私保护下的营销激活,但不会把原始消费者记录直接暴露成协议可见明文。
入口区分
这个场景有两层:
- 业务侧的 campaign intent
- 协议认可的人群资格判断与筛选任务
“瑞幸希望向新加坡过去 30 天内消费过的用户发券”本身还不是一个完整的协议事件。只有当系统把它转化为一项带有明确约束的授权任务时,它才真正进入 SCP 生命周期。
协议视角

从协议角度看,这个场景的核心,是把一项 campaign intent 转化为一个可验证、可结算的人群筛选结果。
1. Campaign 意图与本地业务输入
瑞幸先定义一场活动,其业务条件包括:
- advertiser identity:瑞幸咖啡
- geography:新加坡
- eligibility window:过去 30 天
- audience rule:过去 30 天内有过瑞幸消费的用户
- audience cap:5000
- downstream outcome:发放优惠券
在这个时点上,它仍然只是业务请求,还不是协议事实。
2. 任务接纳与约束绑定
系统把这个请求转化为被授权的协议工作。
从高层看,admission 需要明确:
- 广告客户是否有权提交这场活动
- 活动是否绑定了明确的 policy 与 budget 上下文
- geography 和时间窗口是否被固定为本次任务的一部分
- audience cap 是否被纳入协议需要评估的任务约束
只有经过这一步,这项 campaign 才成为协议认可的工作。
3. 资格语义的解析
在执行任何筛选之前,协议必须先解释这项任务在当前语义上下文中的含义。
这意味着协议需要先确定以下概念在当前 domain 与 semantic_version 下分别代表什么:
- 瑞幸消费
- 消费时间是否属于过去 30 天
- 新加坡地域资格
- campaign audience membership
- 可以用于发券的目标身份或联系方式
这一步之所以重要,是因为修订后的 SCP 要求共享语义必须先于受保护计算成立。
4. 受保护的资格评估
当语义被解析清楚后,授权计算才可以开始在受保护记录上进行资格判断。
在这个场景里,这一步通常包括:
- 检查用户是否有瑞幸消费记录
- 判断消费时间是否落在过去 30 天内
- 确认是否满足新加坡地域条件
- 组装合资格的人群候选集合
- 按 policy 定义的选择逻辑应用最多 5000 人的上限
在整个阶段中:
- 原始消费记录始终留在授权 Vault 或 TEE 边界内
- 协议依赖的是 evidence、commitment 与可 replay 的工件,而不是任意暴露明文
- 所有筛选逻辑都必须绑定于已接纳的 campaign 约束
5. 验证与被接受的人群结果
协议不会把一份候选受众名单自动视为最终事实。
相反,人群筛选结果还必须经过正确性与完整性验证。高层上看,结果可能是:
- accepted
- rejected
- challenged
只有被接受的结果,才可能继续进入 settlement。
6. 结算、记账与发券依据
如果结果被接受,它就可以进入 settlement,并沉淀为 finalized protocol accounting 的一部分。
在这个场景里:
- settlement 的作用是把已接受的人群筛选结果转化为协议认可的活动事实
- finalized accounting 会成为下游发券的可信依据
- 实际发券动作仍然是下游业务效果,而不是协议事实本身
也就是说,协议负责确定哪份人群结果是可信的;下游业务系统负责把这份可信结果转化为真正发出的优惠券。
系统视角

从 SCS 角度看,同一个场景是由一组协作的运行时模块共同实现的。
1. 准入接口面
面向客户端的 admission 服务接收 campaign 请求,校验广告客户身份与授权,并把活动约束绑定为系统可执行的任务。
2. 协调与生命周期控制
协调服务负责把 campaign 从 admission 推进到 semantic resolution、受保护资格评估、verification 与 settlement,同时保持整个过程有序且可审计。
3. 语义命名空间与注册表服务
语义服务负责在 commerce、transaction、identity、geography 与 audience 等相关 domain 下解释这项活动,并保持与当前 semantic_version 的兼容性。
4. Vault 与受保护数据服务
Vault 侧的存储和带授权的数据访问机制,负责在保持消费记录私密性的同时,只向资格计算暴露被允许的记录材料。
5. 执行运行时
执行 worker 在受保护运行时内完成 recent purchase、geography filter 与 audience cap 逻辑,并产出可 replay 的结果工件。
6. 验证与质疑服务
验证服务检查人群筛选结果、保留可 replay 的 evidence,并发布 accepted、rejected 或 challenged 的系统结论。
7. 结算与下游发券
settlement 服务负责组装 finalized accounting context。下游 campaign 系统随后可以在不改写协议 finality 的前提下,用这份最终结果作为发券依据。
语义与资格处理
这个场景也是理解受治理语义解释的一个好例子。
如果活动依赖的某些概念无法被当前 canonical set 直接解释,可能会出现几种情况:
- 任务会先被阻塞,直到语义被澄清
- 某些概念会在策略允许的范围内保持本地处理
- 一些新的 campaign 或 audience 概念之后可能进入受治理的语义演化流程
因此,这个用例自然会触及:
domainCanonicalAttribute- local attribute handling
- governed candidate evolution
关键在于,campaign 逻辑不能私下或悄悄改写协议含义。
结算与发券后果
这个用例并不意味着瑞幸一定会直接获得协议奖励。
在协议层面,更核心的后果是:
- 形成一份可信、被接受、并已结算的人群筛选结果
- 形成下游发券可依赖的 finalized accounting basis
如果这条活动流程属于一个带激励的网络路径,那么也可能对某些 production roles 产生 reward 后果,例如:
- Vault operator
- executor
- verifier
这些后果都必须建立在协议认可的状态迁移之上。
关键边界提醒
广告活动 brief 本身并不自动等于一个完整的协议事件。
只有当系统把这项业务意图转化成一项带有明确 audience、location 和 recency 约束的授权任务时,完整的 SCP 生命周期才会开始。
同样地,真正发出的优惠券也不是协议事实本身;协议事实是那份被接受并完成 settlement 的目标受众结果,而下游系统只是基于这份结果采取业务动作。