# App 邀请功能交接

已在 `juku-mobile` 接入邀请页面：我的 → 邀请好友，独立的邀请总览、绑定、记录和规则页面，中英文、浅色、无阴影。当前活动参数与旧关系规则均读取后台；活动关闭仍可查看旧记录。没有固定奖励数、默认播放额度或虚构到账状态。

## 实际接口

| 操作 | 请求 | 结果 |
| --- | --- | --- |
| 查询 | `GET /api/consumer/referrals/summary` | 当前活动、状态计数、最近邀请记录、当前绑定关系 |
| 获取邀请码 | `POST /api/consumer/referrals/code {}` | `ready` 的邀请码及有效期，或 `unavailable` |
| 绑定 | `POST /api/consumer/referrals/bind {code}` | 扁平的 `bound` 关系，或明确的跳过／无奖励资格结果 |
| 申诉 | `POST /api/consumer/referrals/appeal {relationId,reason}` | 扁平的 `appeal_open` 关系 |

请求复用已有邮箱登录与 API 凭据设施。仅已验证并完成消费者身份桥接的账号可以调用，所有请求限定于配置的 API 站点。切换账号、站点或凭据后，旧返回不能写入新页面或合并旧 Cookie；读取原生凭据期间发生切换，也会在发送前阻止请求。第三方视频请求逻辑没有修改。

## 操作边界

- 当前记录查询成功前不开放写入；查询失败保留重试入口。
- 绑定与申诉结果不明时只查询一次记录，不自动重复提交。页面再次进入先读取记录，继续复用领域已有的唯一绑定、单关系申诉和奖励入账约束，没有增加跨页面意图存储。
- HTTP 认证拒绝显示登录提示；可能已经提交的迟到身份变化保留待确认状态。未知结果不能显示为已绑定、已到账或申诉完成。
- DTO 校验活动规则、关系状态、脱敏标签与规则快照，错误的成功响应不能冒充有效结果。申诉／审核中与拒绝状态按真实领域语义校验。
- 邀请规则、奖励数、有效期、限额、审核方式全部来自后台。历史关系使用绑定时的规则快照。
- 复制使用锁定的 `expo-clipboard@57.0.2`，分享使用 React Native `Share`；只分享后台实际返回的邀请码。

## 验证

2026-10-03：全项目 **148/148** 测试通过，`tsc --noEmit` 与差异格式检查通过。新增 **8 项 API + 12 项实际 React/TanStack 交互测试**，覆盖身份／站点隔离、迟到响应、异步凭据读取期间退出、认证拒绝恢复、未知绑定／申诉结果、关闭活动旧记录、错误 DTO、复制和分享。

独立子 Agent 对同一邀请实现进行只读对抗检查，20 项通过，复核后没有剩余阻塞问题。这些是实际 App 模块与 React/TanStack 的协议测试，原生平台通过替身运行；不能作为真机、真实邮件或数据库联调证据。

主 Agent 验证Expo 57自动链接实际引用 `expo.modules.clipboard.ClipboardModule`，并离线通过 `:expo:compileReleaseKotlin`。Clipboard使用官方预编译AAR，未把不存在的独立源码编译任务算作通过。未构建或发布 APK／OTA。观看资格证据、设备认证签发与发奖作业尚未完成生产接入；页面不因此宣称 App 已认证或自动获得每日 50 次权益。

## 代码范围

新增 `src/consumer/referrals.ts`、`src/screens/InviteScreen.tsx`，修改导航、我的入口、双语词条及 `src/api.ts` 的四接口薄适配；新增邀请 API／React 回归测试。没有修改后端、后台、Web 或播放器传输算法。
