"""nb2 조립이 막히면 **글을 고치기 전에 제공자를 바꾼다** (2026-09-19).

사용자 지시: 「nb2 조합도 말이야 문제되면 seedream 으로」.

## 왜 순서가 중요한가

종전 사다리는 Gemini↔Grok 둘뿐이라, 둘 다 막히면 **연화**(글을 부드럽게)
하는 수밖에 없었다. 연화는 요청한 것을 지운다 — 실측으로 앰버(10세)의
`severely_injured` 가 **세 판 모두 말짱한 그림**이 됐고 어른이 같이 그려졌다.

seedream 은 운반층이 아예 달라(OpenRouter 전용 이미지 엔드포인트) 막는 선도
다르다. 참조 쪽에서 그 한 장을 실제로 받아 냈다.
"""
from __future__ import annotations

import inspect

from app.modules.pipeline import multiroll_gemini as mg


def _ladder_src() -> str:
    return inspect.getsource(mg.make_nb2_gen_fn)


def test_the_ladder_has_a_third_backend():
    s = _ladder_src()
    assert '("third_backend", "third", False)' in s
    assert 'build_cine_client("seedream")' in s


def test_the_third_backend_comes_before_softening():
    """★제공자를 다 써 본 **다음에** 글을 고친다."""
    s = _ladder_src()
    i_third = s.index('"third_backend"')
    i_soft = s.index('("sanitized"')
    assert i_third < i_soft, "연화가 세 번째 제공자보다 먼저면 요청이 지워진다"


def test_the_stage_cap_is_a_gate_not_a_comment():
    """★상한이 주석에만 있으면 단계를 늘릴 때 둘이 어긋난다.

    실제로 그랬다 — 「상한 5」라고 적힌 채 6 으로 늘어났다.
    """
    s = _ladder_src()
    assert "_LADDER_STAGE_CAP = 6" in s
    assert "len(stages) > _LADDER_STAGE_CAP" in s
    assert "상한 6" in s, "문서와 문의 숫자가 어긋난다"
