## 1. 依赖（复用 phase-2a，无新增）

- [x] 1.1 确认插屏 API 在 core-taku:6.5.73.3 + ADX 适配器已配（phase-2a 已加），无需改 gradle

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

- [x] 2.1 加插屏方法：`loadInterstitial(placementID, settings)`、`showInterstitial(placementID, scenario): Promise`、`showInterstitialWithConfig(placementID, showConfig): Promise`、`interstitialReady(placementID): boolean`、`checkInterstitialLoadStatus(placementID): Object`、`getInterstitialValidAds(placementID): Promise<Object[]>`、`entryInterstitialScenario(placementID, scenario)`
- [x] 2.2 加 Auto：`addAutoLoadInterstitial`、`removeAutoLoadInterstitial`、`autoLoadInterstitialReady`、`showAutoLoadInterstitial`

## 3. 常量

- [x] 3.1 `src/constants/Const.ts` 补 `InterstitialCallback` 17 个 callbackName（与 Const.java 对齐；含 show/showFail，无 reward/again）；index.tsx 导出
- [x] 3.2 sync-const-check 通过（Const.ts 值 ⊆ Const.java）

## 4. L3 Android — 移植插屏桥（interstitial/）

- [x] 4.1 移植 `ATAdInterstitialManger → ATInterstitialManager`（路由 + `ConcurrentHashMap<placementId, Helper>` + Promise/init/Activity 门控 + RN 类型转换），包名 `com.anythink.reactnative.interstitial`
- [x] 4.2 移植 `ATInterstitialHelper`（类名不变）：持 `ATInterstitialAd` + `ATInterstitialExListener` + AdSource listener；回调经 `emit(InterstitialCall, callbackKey, pid, adInfo→Map, errMsg, extra)`，用 `Const.CallbackMethodCall.InterstitialCall`
- [x] 4.3 移植 `ATAutoLoadInterstitialHelper`（`ATInterstitialAutoAd`）；Auto 复用同一通道
- [x] 4.4 ATReactNativeBridgeModule 加插屏方法路由 + 构造注入 Manager context；未 init→reject SDK_NOT_INITIALIZED；show 无 Activity→reject ACTIVITY_NULL

## 5. L1 TypeScript

- [x] 5.1 `src/interstitial/ATInterstitialAd.ts`：load/show/isAdReady/checkAdStatus/setAdListener/entryAdScenario/checkValidAdCaches（typed listener：onShow/onShowFail/onPlayStart/onPlayEnd/onPlayFail/onClose/onClick/onDeeplink + onEvent；**无** reward/again）
- [x] 5.2 `src/interstitial/ATInterstitialAutoAd.ts`（复用 dispatch）
- [x] 5.3 `setAdListener` 经 `ATAdEvents.setAdListener` 注册；`src/index.tsx` 导出 ATInterstitialAd/AutoAd

## 6. L3 iOS（stub + log）

- [x] 6.1 `ATReactNativeBridge.mm` 加插屏方法 stub + NSLog（播放失败用 interstitialDidFailToPlayVideo）；查询返回空/false；保留线程守护

## 7. Example

- [x] 7.1 `example/src/config/sdkConfig.ts` placements 加插屏位 `interstitial: b5fdc16e15a78b`
- [x] 7.2 Home 加插屏按钮（复用 `AdActionButton` 状态机）+ RewardManager 同款 InterstitialManager（或合并到一个 AdManager）

## 8. 单测

- [x] 8.1 `ATInterstitialAd.test.ts`：loadInterstitial 参数含 placementID（mock TurboModule）（I-Q01）
- [x] 8.2 Event 分发：mock InterstitialCall → 对应 placement listener 收到正确 callbackName（含 show/playStart）

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

- [x] 9.1 Android：`yarn example android` 编译绿；插屏 load → show → close 全链路（含视频 Start→End）
- [x] 9.2 load 失败走 Event + requestMessage（I-F02/F08）
- [x] 9.3 iOS：pod install + `yarn example ios` 编译过、NSLog 路由可见
- [x] 9.4 jest 单测过；tsc/prettier/sync-const-check 绿
- [x] 9.5 对照验收 §六 I-F/D/Q/C 逐条；更新实施规范 §十二 Phase 2-B → ✅
