# fix-sources-add-channel
## Дизайн
### 1. Форма добавления — поле channel (web/templates/sources.html)
Вставить после поля `url` (перед `crawler`), чтобы telegram-поля шли вместе:
```html
```
Поле обязательное только для telegram: маленький inline-скрипт в конце формы
переключает атрибут `required` при смене `select[name=crawler]`:
```html
```
### 2. Таблица — показ channel у telegram (web/templates/sources.html)
В колонке crawler (строки 91-93) добавить вывод channel для telegram,
по аналогии с feed_url для rss:
```html
{{ s['crawler'] }}
{% if s['crawler'] == 'rss' and s['feed_url'] %} {{ s['feed_url'] }}{% endif %}
{% if s['crawler'] == 'telegram' and s['channel'] %} {{ s['channel'] }}{% endif %}
```
### 3. Backend — без изменений
`web/app.py::_form_source` уже собирает `channel` (строка 877),
`sources/sources.py::_validate_source` уже проверяет (строка 218),
`db_source_to_yaml` уже пишет в yaml (строка 181). Правки только в шаблоне.
## Проверка
1. `openspec validate fix-sources-add-channel` — чисто.
2. Ручной тест через веб: добавить telegram-источник с channel → success;
без channel → браузер подсветит поле, серверная ошибка не нужна.
3. Рестарт `vesti-web`, проверить страницу /sources.