"""Живая проверка панели: сервер отдаёт страницу и данные, разметка на месте."""
import json, sys, urllib.request
from pathlib import Path

run_dir = next(Path(".chekan").glob("*/state.json")).parent
port = (run_dir / "serve.pid").read_text().split()[0]
base = f"http://localhost:{port}"

def get(path):
    with urllib.request.urlopen(f"{base}/{path}", timeout=10) as r:
        return r.status, r.read().decode("utf-8")

problems = []
code, html = get("dashboard.html")
if code != 200:
    problems.append(f"страница отдала {code}")
# Заголовки секций в исходнике набраны обычным регистром — заглавные делает CSS.
for marker in ("Выковано в КодоЦех", "https://codoceh.ru", "<h2>Фазы</h2>", "<h2>Гейты</h2>",
               "<h2>Журнал доказательств</h2>", "data:image/png;base64"):
    if marker not in html:
        problems.append(f"в разметке нет: {marker}")
if "__ICON" in html:
    problems.append("иконка не вшита — остался плейсхолдер")

code, raw = get("state.json")
state = json.loads(raw)
if code != 200 or not state.get("tasks"):
    problems.append("state.json недоступен или пуст")

code, ev = get("evidence.jsonl")
rows = [json.loads(l) for l in ev.splitlines() if l.strip()]
if not rows:
    problems.append("журнал доказательств пуст")

print(f"страница {len(html)} Б, тасков {len(state.get('tasks', []))}, доказательств {len(rows)}")
if problems:
    print("ПРОБЛЕМЫ:", *problems, sep="\n  ")
    sys.exit(1)
print("панель отдаётся, данные читаются, подпись и иконка на месте")
