Общий хук useFullReport(cad): POST /report (200 ready → мгновенный
download; 202 building → TanStack-поллинг status 5с с cap 3 мин →
честный timeout «Сборка затянулась — попробуйте позже»), авто-download
по ready (ref-guard, один раз), скачивание скрытым <a download> —
наследует Caddy basic_auth без отдельного blob-fetch. Сброс прогона
при смене cad (страховка in-place реюза), elapsed по wall-clock
(иммунно к троттлингу фоновых вкладок). Кнопка в PticaReports
(вместо honest-disabled «скоро») и ExportButtons — логика не
дублируется. Статусы сужены типами из api-types (не руками).
Fix: паттерн reports/ из PR-D в .gitignore заякорен в корень
(/reports/) — неякоренный матчил и frontend .../ptica/reports/.
Refs #2259