"""task-3075 ANU 정상완료 콜백 발사 (공식 registrar 경로)."""
import io
import json
import sys

sys.path.insert(0, "/home/jay/workspace")

from utils.anu_callback_registrar import (  # noqa: E402
    build_callback_envelope,
    register_normal_callback,
    merge_registrar_result_into_envelope,
    envelope_byte_warning,
)
from utils.callback_envelope_schema import (  # noqa: E402
    ANU_CALLBACK_KEY,
    envelope_utf8_byte_count,
)

result = {
    "executor_name": "dev1-bot(task-3075)",
    "result_path": "/home/jay/workspace/memory/events/task-3075.json",
    "report_path": "/home/jay/workspace/memory/reports/task-3075.md",
    "commit_sha": "76a9eec0f05f2dfbfc49d1f150c69200c227213f",
    "spec_sha256": "0e50eb38ea29b1df",
    "file_summary": (
        "PR #287 OPEN (머지·배포 미실행, 지시 준수). base dcb70d4 / head 76a9eec / "
        "tree 96c4a788 == 로컬 커밋 tree(대조 일치). 브랜치 task/task-3075-dev1. "
        "하네스가 CLI 를 막아 REST API 로 ref 생성 -> 원격 커밋 sha 가 로컬(567e083)과 "
        "다르다. 대조는 반드시 tree sha 로. "
        "수정: PLAN_SKILL_ACCESS[4] 에 benchmark 추가, [5] 키 보존, DB 무변경(회장 A안), "
        "MAX_REACHABLE_PLAN_SORT_ORDER=4 신설. 5 files +59/-14. src/** diff 0줄. "
        "실측 base 는 Free~Hidden 5개 플랜 전부 benchmark_prompt 0자, "
        "head 는 Hidden(4) 만 2209자+환각금지 가드 포함(나머지 0자 유지). "
        "DB 재확인 Free0 Basic1 Pro2 Max3 Hidden4(최대4). 활성구독 10명="
        "Hidden5/Max2/Pro1/Basic1/Free1. "
        "★결함을 봉인하던 기존 테스트 3건 정정: t3064 'benchmark 는 [5] 에만' 단언, "
        "t3072 HIDDEN_PLAN 픽스처 sort_order=5(도달불가)+'권한없는플랜'이 4 -> 4/3, "
        "bench_harness 대조기준 [5]->[4]."
    ),
    "regression_summary": (
        "회귀 base 3254p/5s/0f -> head 3280p/7s/0f, 신규 실패 0, 신규 테스트 28건. "
        "변이 8/8 KILLED (주입 전 'assert 원문 in 소스'+count==1 로 no-op 불가 입증, "
        "파이프 없이 returncode 직접 판정). M8(필터 결선 무력화)은 1차 SURVIVED -- "
        "상수만 읽고 main.py:1981 실제 결선을 안 탔음(t2970/t3014 유형) -> 실제 "
        "엔드포인트 테스트 추가해 자체 해소. "
        "CI 9success/2failure 이나 본 변경 무관: ci=러너 디스크풀(Errno 28)로 pip "
        "install 사망 -> 파이썬 테스트 아예 미실행(=CI 가 이 PR 서버 테스트를 한 번도 "
        "검증 못 함, ANU 로컬 재실행 필요). e2e=프론트 스펙 3건(t2969 328/390, t2998 486). "
        "#284/#285/#286 전건 동일 적색, #286 과 실패집합 문자단위 일치. 자가수정 안 함. "
        "★★명세 전제 반증: 어긋난 dict 는 하나가 아니다. 코드 플랜 dict 전체가 "
        "1-indexed(index=DB sort_order+1). PLAN_SKILL_ACCESS 는 Pro/Max 도 어긋남, "
        "MODEL_CAP=Basic/Max, MODEL_TIER=Pro/Max, CHANNELS=Basic, CLI_MODEL=Pro(죽은코드). "
        "실피해: Basic(월19000원 유료) 4채널 차단+cap haiku, Max(월79000원) opus 불가, "
        "Pro naver_seo/geo 미수령. 권한·과금이라 손대지 않고 보고만 -- 회장 결정 필요. "
        "잠복결함2: (1) get_user_plan 이 plan_id 미반환 -> plan_ai_models/plan_token_config "
        "보정경로 2곳 사망 (2) main.py:718 에서 sort_order=0(Free)이 falsy 라 1 로 승격, "
        "Free 폴백도 .eq(name,'무료')인데 DB 이름은 영문 'Free'. "
        "ANU 조치: 머지+배포(배포까지 해야 증상 멎음), 로컬 회귀 독립확인, 범위밖 8건 상신 판단."
    ),
}

env = build_callback_envelope(
    task_id="task-3075",
    result=result,
    anu_key=ANU_CALLBACK_KEY,
    collector_role="ANU",
)
n = envelope_utf8_byte_count(env)
print("envelope bytes:", n, "| <=3900:", n <= 3900)
print("warn:", envelope_byte_warning(env))
if n > 3900:
    print("ABORT: over limit")
    sys.exit(1)

res = register_normal_callback(env, delay_seconds=10, anu_key=ANU_CALLBACK_KEY)
print("status:", getattr(res, "status", None))
print("schedule_id:", getattr(res, "schedule_id", None))
print("delivery:", getattr(res, "delivery_status", None))
print("receipt:", getattr(res, "receipt_status", None))
print("error:", getattr(res, "error", None))

final = merge_registrar_result_into_envelope(env, res)
io.open("/home/jay/workspace/memory/events/task-3075.anu-callback.json", "w",
        encoding="utf-8").write(json.dumps(final, ensure_ascii=False, indent=2))
print("envelope saved")
