Files
dedinit.ru/openspec/changes/rss-full-feed/specs/site-rss/spec.md
T
estorozhenko cb4decb672 feat(rss): полный текст и обложки в RSS-ленте, лимит 5 постов
- hugo.toml: ShowFullTextinRSS=true, [services.RSS] limit=5
- тема rDedInit rss.xml: prepend cover (figure.entry-cover, absURL) в content:encoded
- openspec change rss-full-feed (план A реализован)
2026-09-08 20:04:44 +00:00

73 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# RSS Feed Capability
## ADDED Requirements
### Requirement: R1 — Лимит постов в RSS-ленте
Главная RSS-лента (`/index.xml`) MUST содержать не более 5 последних постов
(по `publishDate`), отсортированных по дате публикации по убыванию.
#### Scenario: Сборка сайта даёт ровно 5 элементов item
GIVEN сайт собран командой `hugo --minify`
WHEN запрашивается `https://dedinit.ru/index.xml` (файл `public/index.xml`)
THEN число элементов `<item>` в `<channel>` равно 5 (или меньше, если постов < 5),
и это 5 самых свежих постов по дате.
### Requirement: R2 — Полный текст поста в RSS
Каждый `<item>` главной RSS-ленты MUST содержать `<content:encoded>` с полным
HTML-контентом поста (поле `.Content` темы Hugo), обёрнутым в CDATA, включая
разметку, блоки кода и абсолютные ссылки на медиафайлы поста.
#### Scenario: content:encoded присутствует и содержит медиа-URL
GIVEN сайт собран командой `hugo --minify`
WHEN в `public/index.xml` смотреть элемент `<item>` любого из 5 последних постов
THEN присутствует непустой `<content:encoded>`, содержащий HTML поста и ссылки
вида `https://dedinit.ru/<год>/<slug>/hero.svg` (или аналогичные абсолютные URL
медиа).
### Requirement: R3 — Описание поста в RSS
`<description>` каждого `<item>` MUST быть непустым: используется frontmatter
`description` если задан, иначе авто-summary `.Summary`.
#### Scenario: description непустое
GIVEN сайт собран командой `hugo --minify`
WHEN в `public/index.xml` смотреть `<description>` каждого `<item>`
THEN оно непустое и не содержит обрезанных HTML-тегов.
### Requirement: R4 — Метаданные элемента RSS
Каждый `<item>` MUST содержать корректные `<title>`, `<link>`, `<pubDate>`,
`<guid>` (permalink), согласно текущему шаблону темы
`themes/rDedInit/layouts/_default/rss.xml`.
#### Scenario: Обязательные поля элемента
GIVEN сайт собран командой `hugo --minify`
WHEN парсить `public/index.xml` как XML
THEN каждый `<item>` содержит все 4 обязательных поля, `<link>` и `<guid>`
равны полному URL поста (`https://dedinit.ru/<год>/<slug>/`).
### Requirement: R5 — Медиа-обложка в RSS
Каждый `<item>` MUST включать в `<content:encoded>` обложку поста
(`cover.image`, hero.svg) как `<figure class="entry-cover"><img ...></figure>`
перед полным текстом, со ссылкой на абсолютный URL медиафайла
(`https://dedinit.ru/<год>/<slug>/hero.svg`), если `cover.image` задан.
#### Scenario: Обложка в content:encoded
GIVEN сайт собран командой `hugo --minify`
WHEN в `public/index.xml` смотреть `<content:encoded>` поста с cover.image
THEN он начинается с `<figure class="entry-cover">` и содержит
`<img src="https://dedinit.ru/<год>/<slug>/hero.svg"`.
#### Scenario: Нет cover — нет figure
GIVEN сайт собран командой `hugo --minify`
WHEN в `<content:encoded>` поста без cover.image
THEN отсутствует `<figure class="entry-cover">`, контент начинается с текста поста.