Files
dedinit.ru/openspec/specs/archive-by-year-month/spec.md
T

3.3 KiB

archive-by-year-month Specification

Purpose

Страница «Архив» (/posts/) блога dedinit.ru отображает все посты, сгруппированные по годам и месяцам (как штатный архив Hugo), вместо плоского списка с пагинацией.

Requirements

Requirement: Группировка постов по годам и месяцам

Система SHALL отображать на странице /posts/ список всех постов, сгруппированный по годам публикации, и внутри каждого года — по месяцам публикации. Заголовки содержат год/месяц и количество постов в группе.

Scenario: Страница /posts/ показывает годы

  • WHEN пользователь открывает страницу /posts/
  • THEN страница содержит заголовки годов (например «2026», «2023»), под каждым — посты этого года
  • AND возле каждого года отображается количество постов

Scenario: Внутри года посты сгруппированы по месяцам

  • WHEN пользователь открывает страницу /posts/
  • THEN внутри каждого года посты сгруппированы по месяцам публикации (например «January», «September»)
  • AND возле каждого месяца отображается количество постов

Scenario: Каждый пост — ссылка на свою страницу

  • WHEN пользователь видит запись в архиве
  • THEN заголовок поста является ссылкой на его страницу (permalink)
  • AND под заголовком отображаются метаданные поста (дата и пр.)

Requirement: Заголовок и описание страницы

Система SHALL отображать на странице /posts/ заголовок «Архив» и описание страницы (из frontmatter секции).

Scenario: Заголовок страницы

  • WHEN пользователь открывает страницу /posts/
  • THEN заголовок страницы — «Архив»

Requirement: Сохранение остальной функциональности секции

Система SHALL сохранять работоспособность RSS-ленты секции /posts/ и URL постов (permalinks не меняются) при переключении layout на архив.

Scenario: RSS секции не сломан

  • WHEN пользователь запрашивает RSS-ленту секции /posts/ (index.xml)
  • THEN лента валидна и содержит посты секции
  • WHEN пользователь открывает пост из архива
  • THEN URL поста соответствует permalink /:year/:slug/ (как и раньше)