# Подборки

Подборка — это мешок анекдотов, размеченный по жанрам. Жанр здесь не украшение:
он идёт прямо в промпт («сохрани разворот в последнем слове»), красит узлы в
графе и едет в выгрузку. Модель на 0.6B сама жанр не удержит — ей надо сказать,
что именно повторять (SPEC.md §5b).

## Что лежит рядом

`ru-start.json` — стартовая сотня, по 20 строк на каждый из пяти жанров.
Написана нами и отдана в **общественное достояние (CC0)**: берите, переделывайте,
не спрашивайте.

## Права: почему сотня своя, а не скачанная

Открытых русских наборов анекдотов с честной лицензией нет — все найденные
оказались скрейпами сайтов и телеграм-каналов, где лицензию ставил сборщик,
а не автор текстов (разбор — в SPEC.md §5). Поэтому корпус написан с нуля.

Первый заход (15.09.2026) всё же опирался на известные шутки в девяти строках —
народные сюжеты вроде рыбаков или мухи в супе, мем про «работает на моей машине»,
известную фразу про регулярные выражения. Ставить на них CC0 нельзя, даже когда
сюжет народный. **16.09.2026 все девять переписаны заново**, вместе с ещё
шестнадцатью — слабыми и не соответствовавшими своему жанру. Знакомая рамка
(«заходит как-то мужик…») жанром `klassika` разрешена, но удар в конце должен
быть свой.

Если добавляете строки: либо они ваши, либо у них есть лицензия, которая
покрывает **сами тексты**, а не код сборщика.

## Формат

Полная схема — то, что лежит в `ru-start.json`:

```json
{
  "version": 2,
  "lang": "ru",
  "title": "Как называется подборка",
  "rights": "Кто написал и на каких условиях",
  "genres": {
    "byt": { "name": "Бытовая злость", "mech": "Узнавание плюс точка кипения" }
  },
  "items": [
    { "id": "byt-01", "g": "byt", "t": "Текст анекдота." }
  ]
}
```

- `genres[код].mech` — **устройство шутки**, и это самое важное поле: именно оно
  подставляется в промпт. Пишите не «про быт», а как шутка работает.
- `items[].g` — код жанра, ключ из `genres`.
- `items[].t` — текст. `\n` внутри работает, диалоги так и набираются.

## Что примет загрузчик своей подборки

Экран выбора умеет принять файл или ссылку. Понимает четыре формы:

| Что приносите | Что получается |
|---|---|
| `.txt` | строка = анекдот, пустые пропускаются |
| `.json`, массив строк | то же, без жанров |
| `.json`, массив `{t, g?}` | `text`/`genre` тоже принимаются как синонимы `t`/`g` |
| `.json`, полная схема выше | единственный способ принести свои описания жанров |

Массив под ключом `jokes` тоже понимается — так отдают шутки некоторые
открытые API.

Если хоть одна строка без жанра, подборка спросит **один жанр на весь файл** —
из стандартной пятёрки, своя таксономия тут не заводится. Если строки
размечены, но блока `genres` нет, имя и устройство подставятся по знакомым
кодам, а для незнакомых в интерфейсе останется голый код и пустое устройство
шутки — промпт от этого беднеет, так что свои коды лучше описывать.

Файл читается прямо в браузере и никуда не уходит. Ссылка тянется обычным
фетчем со стороны зрителя: разрешает ли источник забирать себя со стороны —
решает источник, бэкенда и прокси у прикола нет.
