## 1. 原生依赖（example 宿主 build.gradle）

- [x] 1.1 查 jfrog china_sdk 确认与 `core-taku:6.5.73.3` 匹配的 `rewardedvideo`(taku) 模块版本，加 `implementation`
- [x] 1.2 加 ADX 适配器：`implementation "com.anythink.sdk:adapter-taku-sdm:6.5.68.1.0"`（china_sdk）+ `implementation "com.smartdigimkttech.sdk:sdm-sdk-cn:6.5.68"`（mavenCentral）
- [x] 1.3 如需补 `basead`/`basead_adapter`/`mediavideo` 等公共模块（按编译报错/SDK 预检提示）；仓库已配，无需新增
- [x] 1.4 编译确认 ADX 预检警告消失、`com.anythink.rewardvideo.api.*` 符号可解析

## 2. L2 Codegen Spec 扩展（`src/specs/NativeATBridge.ts`）

- [x] 2.1 加激励方法：`loadRewardedVideo(placementID, extra)`、`showRewardedVideo(placementID, showConfig?)`、`rewardedVideoReady(placementID): boolean`、`checkRewardedVideoLoadStatus`、`entryRewardedVideoScenario(placementID, scenario)`、`getRewardedVideoValidAds(placementID): Promise<Array>`
- [x] 2.2 加 Auto：`autoLoadRewardedVideoAD`、`cancelAutoLoadRewardedVideoAD`、`showAutoLoadRewardedVideoAD` 等（参数结构化对象）

## 3. L3 Android — 移植激励桥（reward/）

- [x] 3.1 移植 `ATAdRewardVideoManger → ATRewardVideoManager`（路由 + `ConcurrentHashMap<placementId, Helper>`），仅改包名 `com.anythink.reactnative.reward`
- [x] 3.2 移植 `ATRewardVideoHelper`（类名不变）：持 `ATRewardVideoAd` 实例 + Listener；回调内 `ATAdInfo/AdError → 字典 → ATReactNativeEventEmitter.sendCallback(RewardedVideoCall, callbackName, placementId, ...)`
- [x] 3.3 移植 `ATAutoLoadRewardVideoHelper`；Auto 复用同一事件通道，callbackName 与手动一致
- [x] 3.4 Listener → EventEmitter 用 Const.RewardVideoCallback.* 常量（禁硬编码）；AdSource 回调串行发送
- [x] 3.5 ATReactNativeBridgeModule 加激励方法路由到 ATRewardVideoManager；未 init → reject SDK_NOT_INITIALIZED；show 无 Activity → reject ACTIVITY_NULL

## 4. L1 TypeScript

- [x] 4.1 `src/rewardvideo/ATRewardVideoAd.ts`：load/show/isAdReady/checkAdStatus/setAdListener/entryAdScenario/checkValidAdCaches（load/show 失败只走 Event，禁 reject）
- [x] 4.2 `src/rewardvideo/ATRewardVideoAutoAd.ts`（静态 AutoLoad）
- [x] 4.3 `setAdListener` 经 `ATAdEvents.setAdListener(placementID, listener)` 注册（复用 phase-1 分发）；payload 解析 ATAdInfo/AdError
- [x] 4.4 `src/index.tsx` 导出 ATRewardVideoAd / ATRewardVideoAutoAd

## 5. L3 iOS（stub + log）

- [x] 5.1 `ios/Classes/Reward/ATRewardVideoManager.m` + Delegate stub：各方法空实现 + NSLog
- [x] 5.2 `ATReactNativeBridge.mm` 路由激励方法到 stub；getRewardedVideoValidAds 等查询返回空；保留线程守护
- [x] 5.3 iOS：pod install + 编译过 + 调用时 NSLog 路由可见（用正确常量 rewardedVideoDidFailToPlay，不照抄 Flutter iOS 错名）

## 6. Example

- [x] 6.1 `example/src/config/sdkConfig.ts` placements 填激励 ADX 位 `b5fdc16c943b7f`
- [x] 6.2 `example/src/managers/RewardManager.ts`（独立文件，可复制到宿主）
- [x] 6.3 Home 激励按钮 + `AdActionButton` 状态机（idle→loading→ready→failed→showing），LogPanel 打印 callbackName + 失败 requestMessage

## 7. 单测

- [x] 7.1 `ATRewardVideoAd.test.ts`：loadRewardedVideo 参数含 placementID（mock TurboModule）（R-Q01）
- [x] 7.2 Event 分发：mock RewardedVideoCall → 对应 placement listener 收到正确 callbackName（R-Q03）
- [x] 7.3 AdError fixture 解析（requestMessage）（R-Q02）；AdActionButton 状态机 ready/failed（R-Q04）

## 8. 验证（你本机编译 + 对拍）

- [x] 8.1 Android：`yarn example android` 编译绿；激励 load → show 一次完整链路（Start→Reward→End→Close）
- [x] 8.2 load 失败走 Event + requestMessage（断网/错位验证 R-F02/F03/F08）
- [x] 8.3 iOS：pod install + `yarn example ios` 编译过、NSLog 路由可见
- [x] 8.4 jest 单测过；tsc/prettier/sync-const-check 绿
- [x] 8.5 对照验收 §五 R-F/D/Q/C 逐条；勾 android-rn-parity §3；更新实施规范 §十二 Phase 2-A → ✅
