## Context

phase-3 是**回顾打磨**，跨多处但不新增样式。权威设计在既有文档，**只引用不复制**：

- ATSDK 全量签名：SPACE **§4.3**（共 36，已盘点缺 22）
- prepareInfo / PlatformViewKeys：SPACE **§17.4.6**、Const.java `PlatformViewKeys`
- 验收：`docs/TopOn-RN-SDK-验收标准.md` **§十**（G-F01~F05 / Q01~Q03 / D01~D02 + M6 冒烟 7 步）
- 自渲染机制：`docs/Native自渲染机制-RN对接说明.md`（viewTag/resolveView）
- 安卓 demo 组织参考：`anythink_plugin/inner_test_plugin/.../activitys/`（SDKAPISetting/PrivacyInfo/ScrollerBanner/TestNative）

## Goals / Non-Goals

**Goals**：ATSDK 22 方法补齐或标 N/A（G-F03）；Native 自渲染入口真机验 + 列表；参数级对齐 §4.x；桥入口/回调 debug 日志；Const 清理（该用去用 + 真死剔除）；demo 多屏全 API；覆盖率达标（G-Q01）；异常防护；三边校验 + 交付收口（G-F01/F02/D01/D02）。

**Non-Goals**：开屏 containerRef（留后续）；iOS 各样式真实实现（同事）；新增广告类型；`addCustomAdapterConfig`（代码本就无）。

## Decisions

- **单 capability `review-polish`**：phase-3 跨 ATSDK/native/demo/质量多处，但作为"一期回顾"用**一个 capability** 收口（与各期一 capability 惯例一致），避免拆 3 个 delta spec 增加管理成本。ATSDK 方法、native 收口、质量项都作为该 capability 的 Requirement。

- **ATSDK 22 方法**（L1→spec→原生→iOS stub 竖切，同既有模式）：
  - 大部分 Android 有对应 `ATSDK.*` API（直转，参考 ATInitManager 现有 putFilter/GDPR 写法）。
  - filter 族 6 个：`ATSDK.setFilterAdSourceIdList(pid, List)` 等，入参 List<String>/Map（ReadableArray/Map 转）。
  - `isEUTraffic()`/`isCnSDK()`/`getArea()`/`isNetworkLogDebug()`/`getPersonalizedAdStatus()` → Promise 返回值。
  - `checkIsEuTraffic(callback)`/`showGdprAuth(callback)` → 回调类经事件或 Promise。
  - **无对应原生 API 的标 N/A**：在 ATSDK.ts 注释 + design 记录原因（如纯 iOS-only），满足 G-F03"已实现 or N/A"。
  - 类型复杂的（setLocation/setDeviceInformationData/setSharedPlacementConfig）走 ReadableMap→JSON→BridgeJsonMapUtil（复用 putFilter 套路）。

- **Const 清理两面**（先核引用计数，再动手）：
  - a) **该用去用**：`NativePrepareBinder` 的 `"title"/"appIcon"/...` 改 `Const.PlatformViewKeys.*`；扫其他硬编码 key 同样替换。
  - b) **真死剔除**：0 引用且确认 Flutter 独有永不用的（`PlatformViewName`/banner 不支持方法数组/`TYPE`）剔除。
  - ⚠️ **保留"还没接但会用"**：`DownloadCallCallback`（下载回调）/`MultipleLoadedKeys`（multipleLoaded payload）/`CommonADCallBack`（公共广告回调，后续待定）—— phase-3 不接也别剔，注释标"预留"。
  - sync-const-check 守门：剔除 Const.java 项时同步 Const.ts，保持三边一致。

- **debug 日志**：桥入口 `ATReactNativeBridgeModule` 每方法 `MsgTools.printMsg("X: 参数...")`（受 setLogEnabled 控制，复用现有 MsgTools 开关）；回调 emit 处补关键参数；RN L1 可选 `__DEV__` 打点。**不引入新日志框架**，沿用 MsgTools/console。

- **demo 多屏**：example 从单 App 拆成**手搓轻量导航 + 多屏**——**不引入 react-navigation**，用一个 `screen` state + 条件渲染切换（零新依赖、简洁易维护）。UI 风格**参考安卓 inner_test demo**（iOS demo 也与安卓类似，便于三端一致）。
  - `Home`（入口列表）→ `广告样式屏`（现有 5 个，迁移）/ `Auto 屏`（ATRewardVideoAutoAd/ATInterstitialAutoAd 各跑一次，对齐 §十 M6 第 7 步）/ `SDK API 设置屏`（GDPR/filter/channel/debug 按钮，逐个调 ATSDK + LogPanel 看结果）/ `隐私屏`（GDPR 全流程）/ `自渲染 native 屏`（RN 拼布局 + viewTag）/ `列表屏`（FlatList 多 banner/native 验不串位）。
  - 复用 `EventLogPanel`/`AdActionButton`/`AD_STATE_COLOR`。

- **覆盖率**：补 `ATSDK.test.ts`（22 新方法 dispatch + init 参数校验）、各 L1 异常防护测试、Const 100%、ATAdEvents ≥95%。`npm run test:coverage` 达门槛。

- **参数异常防护**：各 L1 入口对空 placementId / null adRequest / 非法 prepareInfo 不崩（早返回 + 日志），补单测。

## Risks / Trade-offs

- [自渲染 resolveView] 仍是最不确定项——New Arch 反查 RN view 的 API/时序需真机迭代；建议**对 native 自渲染入口单独跑 writing-plans**。有"容器级整块可点击"兜底。
- [Const 误剔] 剔错会漏功能——严格按"0 引用 + Flutter 独有 + 永不用"三条件，拿不准就留。
- [demo 多屏工作量] 是本期大头（多屏 UI + 导航），可能比 ATSDK 补全还费时；可分批（先设置屏验 ATSDK，列表/自渲染屏后续）。
- [ATSDK N/A 判定] 部分方法 Android 无直接 API，需逐个查 `ATSDK.*` 确认，标 N/A 要有据。
- [覆盖率达标] ATSDK 22 方法多为薄转发，dispatch 测试可批量覆盖；ATAdEvents ≥95% 可能要补边界用例。
- [范围大] phase-3 项杂（API+清理+日志+demo+覆盖率），**propose 后建议 writing-plans 拆细**，尤其 demo 多屏与自渲染入口。
