/** * Bulk-action failure reason → human-readable label. * *
Lives in `src/lib` (а не в `routes/reviews.tsx`) потому что bulk runner * captures axios errors как plain string `reason` (либо `response.data.code`, * либо `error.message`) и хранит в `BulkResult.failed[].reason`. Раньше * reviewer видел сырой code типа `self_approve_forbidden` в bulk result * alert'е — теперь маппит на russain title из {@code extractReviewError} * mapping (single source of truth). * *
Если reason нет в known codes — возвращает as-is (backend message * вероятно уже human-readable, либо unknown server error который оставляем * сырым чтобы reviewer мог скопировать в bug report). * *
Surfaced during TODO 2 (`/plan-design-review` interaction state pass
* 2026-05-14). Pure function — unit tested через `bulkReason.test.ts`.
*/
export function humanizeBulkReason(reason: string): string {
const known: Record