adplacementlisted
Install: claude install-skill snwlee/Nereus
# adplacement
nereus:common 규칙을 따른다. 담당 에이전트: ads-engineer.
배치는 **정지 사유가 아니다.** 그래서 검사기가 없고 게이트도 아니다 — 설계 방법론이다.
정��� 사유는 `adpolicy` 가 본다.
## 0. 배치가 정하는 것은 *언제*지 *몇 건*이 아니다
이 스킬의 모든 기법은 노출을 **한 건도 줄이지 않는다**. 줄이라는 처방은 수익이 바로
떨어지는 것이 보여서 지켜지지 않고, 지켜지지 않는 규칙은 꺼진다.
`Ruling: 광고 안전 처방은 노출을 줄이지 않는 형태여야 한다.`
옮길 수 있는 축은 셋이다: **언제**(타이밍) · **어느 지면**(위치) · **어느 포맷**(단가).
"몇 건"은 축이 아니다.
## 1. 전면 광고 — 손가락이 멈춘 뒤에 띄운다
가장 비싼 오클릭은 **사용자가 이미 탭하려던 자리에 광고가 올라온 것**이다.
사용자는 화가 나고, 구글은 그 클릭을 무효로 보고, 우리는 양쪽을 다 잃는다.
### 게이트의 형태
```
전면 광고 요청
→ 최근 입력이 있었나?
아니오 → 즉시 표시
예 → 입력이 멎을 때까지 대기
├ 멎었다 → 표시
└ 최대 대기 초과 → **그래도 표시**
```
**최대 대기 뒤에는 입력 상태와 무관하게 통과시킨다.** 이것이 이 게이트의 핵심이다.
"입력이 계속되면 영원히 안 띄운다"로 쓰면 스크롤을 멈추지 않는 사용자에게는
광고가 한 건도 안 나가고, 그 손실은 아무 로그에도 안 남는다.
**지연은 되돌릴 수 있고 포기는 되돌릴 수 없다.**
근거는 도너 `WallpaperEngineApp` 의 `ad_show_gate.dart` 다.
### 수치는 프로젝트가 정한다
정숙 임계(입력이 멎었다고 볼 시간)와 최대 대기는 **우리 운영값**이지 정책 수치가 아니다.
`ads-policy.json` 에 넣으면 정책 데이터인 척하면서 낡는다.
여기서는 **형태만** 정하고, 값은 그 앱의 인터랙션 밀도가 정한다.
값을 고를 때 물을 것:
- 이 앱에서 사용자가 **연속 입력을 하는 가장 긴 구간**은 무엇인가(스크롤·드래그·연타).
최대 대기가 그것보다 짧으면 게이트가 그 구간에서 무력해진다.
- 정숙 임계가 그 앱의 **탭 간 자연스러운 간격**보다 짧으면 게이트가 걸리지 않는다.
## 2. 포맷별 지면
| 포맷 | 지면 | 판단 기준 |
|---|---|---|
| `appOpen` | 콜드 스타트·백그라운드 복귀 | **첫 실행은 제외**한다. 실행 횟수로 따로 게이트된다 |
| `anchoredAdaptiveBanner` | 스크롤 목록의 고정 하단 | 적응형을 쓴다 — 기기 폭에 맞춰야 단가가 유지된다 |
| `fixedBanner` | 고정 높이가 강제되는 지면만 | 적응형이 가능하면 적응형이 낫다 |
| `interstitial` | **완료 경계** — 저장·공유·레벨 종료 직후 | 진행