adrevenuelisted
Install: claude install-skill snwlee/Nereus
# adrevenue
nereus:common 규칙을 따른다. 담당 에이전트: ads-engineer.
**조언자다. 게이트가 아니다.** `violations` 를 내지 않고 `levers` 와 `unanswerable` 을 낸다.
어디에 힘을 쓸지는 **사업 판단**이고, 하네스가 강제하면 하네스가 사업을 결정하게 된다.
(`nereus-game:track` 과 같은 규율이다.)
## 0. 퍼널을 뭉치지 않는다
```
requests ──matchRate──▶ matched ──showRate──▶ impressions ──▶ revenue
```
`Ruling: 퍼널 단계를 하나의 효율 지표로 뭉치지 않는다 — 고칠 곳이 뒤집힌다.`
- **matchRate 가 낮다** → 재고·미디에이션·타게팅 신호 문제다. 지면을 늘려도 보여줄 것이 없다.
- **showRate 가 낮다** → 지면·동기·원격 설정 문제다. 채움은 멀쩡한데 보여주질 않는 것이다.
도너 실측에서 리워드는 **채움은 높고 노출은 낮았다**. 하나의 "효율" 지표로 뭉쳤다면
채움 쪽을 고쳤을 것이고, 아무것도 안 바뀌었을 것이다. 실제 수치는 여기 적지 않는다 —
계정·시점 종속이라 빨리 낡고, 낡은 수치가 틀린 확신을 만든다.
## 1. 입력
```json
{
"formats": [
{ "format": "rewarded", "requests": 0, "matched": 0, "impressions": 0, "revenue": 0, "clicks": 0 },
{ "format": "fixedBanner", "requests": 0, "matched": 0, "impressions": 0, "revenue": 0 }
],
"targets": { "matchRate": 0.8, "showRate": 0.3, "maxCtr": 0.1 }
}
```
`targets` 는 **우리가 정하는 기준**이다. 없으면 **병목을 판정하지 않는다** —
기본값을 지어내면 그럴듯하게 틀린다. 판정을 안 했다는 사실은 `unanswerable` 에 남는다.
```bash
echo '{"formats":[…],"targets":{…}}' | node "${CLAUDE_PLUGIN_ROOT}/lib/ad-funnel.mjs"
```
출력: `{ rates, bottleneck, levers, unanswerable }`
## 2. 레버 순서 — 위에서부터 본다
순서가 곧 방법론이다. 아래를 먼저 손대면 위가 그대로라 효과가 상쇄된다.
### A. show rate
**가장 먼저다.** 채워 놓고 안 보여준 노출은 이미 값을 치른 재고다.
지면을 늘리거나(=`adplacement` 의 축) 리워드 동기를 명확히 하거나
원격 설정으로 꺼둔 지면이 없는지 본다.
`bottleneck[format] === "show"` 로 나온다.
### B. 믹스 역전
노출 점유 > 수익 점유인 포맷. **기준 없이도 판정된다** — 점유율끼리의